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/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 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/new", userHandler.NewForm) r.GET("/users/:id", userHandler.Detail) r.POST("/users", userHandler.Create) 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 }