You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

102 lines
3.5 KiB

package router
import (
authHandlerPkg "task-track-backend/internal/handler/auth"
organizationHandlerPkg "task-track-backend/internal/handler/organization"
taskHandlerPkg "task-track-backend/internal/handler/task"
userHandlerPkg "task-track-backend/internal/handler/user"
"task-track-backend/internal/middleware"
"time"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
func Setup(db *gorm.DB) *gin.Engine {
r := gin.Default()
// CORS 中间件
r.Use(cors.New(cors.Config{
AllowOrigins: []string{"*"},
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
AllowHeaders: []string{"*"},
AllowCredentials: true,
}))
// 初始化处理器
authHandler := authHandlerPkg.NewAuthHandler(db)
userHandler := userHandlerPkg.NewUserHandler(db)
organizationHandler := organizationHandlerPkg.NewOrganizationHandler(db)
taskHandler := taskHandlerPkg.NewTaskHandler(db)
// statisticsHandler := statisticsHandlerPkg.NewStatisticsHandler(db) // TODO: 待实现
// 公开路由
public := r.Group("/api")
{
public.POST("/auth/login", authHandler.Login)
public.POST("/auth/register", authHandler.Register)
public.POST("/auth/test-login", authHandler.TestLogin) // 测试登录端点
// 简单的测试端点
public.GET("/test", func(c *gin.Context) {
c.JSON(200, gin.H{
"code": 200,
"message": "API is working",
"time": time.Now().Format("2006-01-02 15:04:05"),
})
})
}
// 需要认证的路由
private := r.Group("/api")
private.Use(middleware.AuthMiddleware())
{
// 认证相关
private.POST("/auth/logout", authHandler.Logout)
private.POST("/auth/refresh", authHandler.Refresh)
private.GET("/auth/me", authHandler.Me)
// 用户管理
private.GET("/users", userHandler.GetUsers)
private.GET("/users/:id", userHandler.GetUser)
private.POST("/users/update/:id", userHandler.UpdateUser)
private.POST("/users/delete/:id", userHandler.DeleteUser)
// 机构管理
private.GET("/organizations", organizationHandler.GetOrganizations)
private.POST("/organizations", organizationHandler.CreateOrganization)
private.GET("/organizations/:id", organizationHandler.GetOrganization)
private.POST("/organizations/update/:id", organizationHandler.UpdateOrganization)
private.POST("/organizations/delete/:id", organizationHandler.DeleteOrganization)
private.GET("/organizations/:id/users", organizationHandler.GetOrganizationUsers)
// 任务管理
private.GET("/tasks", taskHandler.GetTasks)
private.POST("/tasks", taskHandler.CreateTask)
private.GET("/tasks/:id", taskHandler.GetTask)
private.POST("/tasks/update/:id", taskHandler.UpdateTask)
private.POST("/tasks/delete/:id", taskHandler.DeleteTask)
private.POST("/tasks/status/:id", taskHandler.UpdateTaskStatus)
// 任务评论
private.GET("/tasks/:id/comments", taskHandler.GetTaskComments)
private.POST("/tasks/:id/comments", taskHandler.AddTaskComment)
private.DELETE("/tasks/:id/comments/:commentId", taskHandler.DeleteTaskComment)
// 文件上传
private.POST("/upload", taskHandler.UploadFile)
// 任务附件
private.GET("/tasks/:id/attachments", taskHandler.GetTaskAttachments)
private.POST("/tasks/:id/attachments", taskHandler.AddTaskAttachment)
private.DELETE("/attachments/:attachmentId", taskHandler.DeleteTaskAttachment)
// 统计相关 (TODO: 待实现)
// private.GET("/statistics/overview", statisticsHandler.GetOverview)
// private.GET("/statistics/tasks", statisticsHandler.GetTaskStatistics)
// private.GET("/statistics/users", statisticsHandler.GetUserStatistics)
}
return r
}