package api import ( "giteapm/config" "giteapm/internal/api/handlers" "giteapm/internal/middleware" "github.com/gin-gonic/gin" "gorm.io/gorm" ) func SetupRoutes(router *gin.Engine, db *gorm.DB, cfg *config.Config) { h := handlers.NewHandlers(db, cfg) v1 := router.Group("/api/v1") { auth := v1.Group("/auth") { auth.GET("/login", h.GiteaLogin) auth.GET("/callback", h.GiteaCallback) auth.POST("/logout", h.Logout) } v1.Use(middleware.AuthMiddleware(cfg)) { users := v1.Group("/users") { users.GET("", h.ListUsers) users.GET("/:id", h.GetUser) users.PUT("/:id", h.UpdateUser) users.DELETE("/:id", middleware.RequireRole("admin"), h.DeleteUser) users.GET("/me", h.GetCurrentUser) users.PUT("/me", h.UpdateCurrentUser) } projects := v1.Group("/projects") { projects.GET("", h.ListProjects) projects.POST("", h.CreateProject) projects.GET("/:id", h.GetProject) projects.PUT("/:id", h.UpdateProject) projects.DELETE("/:id", h.DeleteProject) projects.POST("/:id/members", h.AddProjectMember) projects.DELETE("/:id/members/:user_id", h.RemoveProjectMember) projects.GET("/:id/members", h.GetProjectMembers) } epics := v1.Group("/epics") { epics.GET("", h.ListEpics) epics.POST("", h.CreateEpic) epics.GET("/:id", h.GetEpic) epics.PUT("/:id", h.UpdateEpic) epics.DELETE("/:id", h.DeleteEpic) } stories := v1.Group("/stories") { stories.GET("", h.ListStories) stories.POST("", h.CreateStory) stories.GET("/:id", h.GetStory) stories.PUT("/:id", h.UpdateStory) stories.DELETE("/:id", h.DeleteStory) } tasks := v1.Group("/tasks") { tasks.GET("", h.ListTasks) tasks.POST("", h.CreateTask) tasks.GET("/:id", h.GetTask) tasks.PUT("/:id", h.UpdateTask) tasks.DELETE("/:id", h.DeleteTask) tasks.POST("/:id/time-logs", h.LogTime) tasks.GET("/:id/time-logs", h.GetTimeLogs) tasks.POST("/:id/gitea-relations", h.LinkGiteaObject) tasks.GET("/:id/gitea-relations", h.GetGiteaRelations) } sprints := v1.Group("/sprints") { sprints.GET("", h.ListSprints) sprints.POST("", h.CreateSprint) sprints.GET("/:id", h.GetSprint) sprints.PUT("/:id", h.UpdateSprint) sprints.DELETE("/:id", h.DeleteSprint) sprints.GET("/:id/burndown", h.GetSprintBurndown) } comments := v1.Group("/comments") { comments.GET("", h.GetComments) comments.POST("", h.CreateComment) comments.PUT("/:id", h.UpdateComment) comments.DELETE("/:id", h.DeleteComment) } tags := v1.Group("/tags") { tags.GET("", h.ListTags) tags.POST("", h.CreateTag) tags.PUT("/:id", h.UpdateTag) tags.DELETE("/:id", h.DeleteTag) } webhooks := v1.Group("/webhooks") { webhooks.POST("/gitea", h.HandleGiteaWebhook) } } } }