forgejo-tickets/internal/handlers/admin/routes.go

60 lines
1.8 KiB
Go

package admin
import (
"github.com/gin-gonic/gin"
"github.com/mattnite/forgejo-tickets/internal/auth"
"github.com/mattnite/forgejo-tickets/internal/config"
"github.com/mattnite/forgejo-tickets/internal/email"
"github.com/mattnite/forgejo-tickets/internal/forgejo"
"github.com/mattnite/forgejo-tickets/internal/middleware"
"github.com/mattnite/forgejo-tickets/internal/templates"
"gorm.io/gorm"
)
type Dependencies struct {
DB *gorm.DB
Renderer *templates.Renderer
Auth *auth.Service
EmailClient *email.Client
ForgejoClient *forgejo.Client
Config *config.Config
}
func NewRouter(deps Dependencies) *gin.Engine {
r := gin.New()
r.Use(middleware.RequestID)
r.Use(middleware.Logging)
r.Use(middleware.Recovery)
tsAuth := &TailscaleAuth{allowedUsers: deps.Config.TailscaleAllowedUsers}
r.Use(tsAuth.Middleware)
dashboardHandler := &DashboardHandler{deps: deps}
r.GET("/", dashboardHandler.Index)
userHandler := &UserHandler{deps: deps}
r.GET("/users", userHandler.List)
r.GET("/users/pending", userHandler.PendingList)
r.GET("/users/new", userHandler.NewForm)
r.GET("/users/:id", userHandler.Detail)
r.POST("/users", userHandler.Create)
r.POST("/users/:id/approve", userHandler.Approve)
r.POST("/users/:id/reject", userHandler.Reject)
r.POST("/users/:id/repos", userHandler.UpdateRepos)
ticketHandler := &TicketHandler{deps: deps}
r.GET("/tickets", ticketHandler.List)
r.GET("/tickets/:id", ticketHandler.Detail)
r.POST("/tickets/:id/status", ticketHandler.UpdateStatus)
repoHandler := &RepoHandler{deps: deps}
r.GET("/repos", repoHandler.List)
r.GET("/repos/new", repoHandler.NewForm)
r.POST("/repos", repoHandler.Create)
r.GET("/repos/:id/edit", repoHandler.EditForm)
r.POST("/repos/:id", repoHandler.Update)
return r
}