Files
backend-go/routes/routes.go
T
2026-06-05 18:00:14 +08:00

132 lines
8.1 KiB
Go

package routes
import (
"github.com/gin-gonic/gin"
"git.beifan.cn/trace-system/backend-go/controllers"
"git.beifan.cn/trace-system/backend-go/middleware"
)
// SetupRoutes 设置路由
func SetupRoutes(r *gin.Engine) {
// 健康检查
r.GET("/api/health", func(c *gin.Context) {
c.JSON(200, gin.H{
"status": "ok",
"message": "服务器运行正常",
})
})
}
// SetupAPIRoutes 设置 API 路由
func SetupAPIRoutes(r *gin.RouterGroup) {
// 认证路由
authController := controllers.NewAuthController()
authRoutes := r.Group("/auth")
{
authRoutes.POST("/login", authController.Login)
authRoutes.POST("/logout", middleware.JWTAuthMiddleware(), authController.Logout)
authRoutes.GET("/profile", middleware.JWTAuthMiddleware(), authController.GetProfile)
authRoutes.PUT("/profile", middleware.JWTAuthMiddleware(), authController.UpdateProfile)
authRoutes.POST("/change-password", middleware.JWTAuthMiddleware(), authController.ChangePassword)
}
// 控制台统计路由
dashboardController := controllers.NewDashboardController()
dashboardRoutes := r.Group("/dashboard")
{
dashboardRoutes.GET("/stats", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), dashboardController.Stats)
}
// 产品溯源路由
productTracesController := controllers.NewProductTracesController()
productTracesRoutes := r.Group("/product-traces")
{
productTracesRoutes.GET("/:serialNumber/query", productTracesController.PublicQuery)
productTracesRoutes.POST("", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), productTracesController.Create)
productTracesRoutes.GET("", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), productTracesController.FindAll)
productTracesRoutes.GET("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), productTracesController.FindOne)
productTracesRoutes.PATCH("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), productTracesController.Update)
productTracesRoutes.POST("/:serialNumber/qrcode", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), productTracesController.GenerateQRCode)
productTracesRoutes.POST("/:serialNumber/wechat-qrcode", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), productTracesController.UploadWechatQRCode)
productTracesRoutes.POST("/:serialNumber/revoke", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), productTracesController.Revoke)
productTracesRoutes.DELETE("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), productTracesController.Delete)
}
// 员工赋码路由
employeeSerialsController := controllers.NewEmployeeSerialsController()
employeeSerialsRoutes := r.Group("/employee-serials")
{
employeeSerialsRoutes.PATCH("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), employeeSerialsController.Update)
employeeSerialsRoutes.POST("/generate", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), employeeSerialsController.Generate)
employeeSerialsRoutes.POST("/:serialNumber/qrcode", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), employeeSerialsController.GenerateQRCode)
employeeSerialsRoutes.GET("/:serialNumber/query", employeeSerialsController.Query)
employeeSerialsRoutes.GET("/", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), employeeSerialsController.FindAll)
employeeSerialsRoutes.PUT("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), employeeSerialsController.Update)
employeeSerialsRoutes.POST("/:serialNumber/revoke", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), employeeSerialsController.Revoke)
employeeSerialsRoutes.DELETE("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), employeeSerialsController.Delete)
}
// 用户管理路由(仅管理员)
usersController := controllers.NewUsersController()
employeesRoutes := r.Group("/employees")
{
employeesRoutes.POST("", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), usersController.Create)
employeesRoutes.GET("", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), usersController.FindAll)
employeesRoutes.PATCH("/:id", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), usersController.Update)
employeesRoutes.POST("/:id/reset-password", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), usersController.ResetPassword)
employeesRoutes.DELETE("/:id", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), usersController.Delete)
}
usersRoutes := r.Group("/users")
{
usersRoutes.GET("/assignable", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), usersController.FindAssignable)
}
// 售后工单路由
aftersalesController := controllers.NewAftersalesController()
aftersalesRoutes := r.Group("/aftersales")
{
// 公开(无需登录)
aftersalesRoutes.GET("/:serialNumber/query", aftersalesController.PublicQuery)
aftersalesRoutes.POST("/:serialNumber/site-images", aftersalesController.UploadSiteImages)
aftersalesRoutes.POST("/:serialNumber/confirm", aftersalesController.CustomerConfirm)
// 技术员 + 管理员
aftersalesRoutes.POST("", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), aftersalesController.Create)
aftersalesRoutes.GET("", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), aftersalesController.FindAll)
aftersalesRoutes.GET("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), aftersalesController.FindOne)
aftersalesRoutes.PATCH("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), aftersalesController.Update)
aftersalesRoutes.POST("/:serialNumber/qrcode", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), aftersalesController.GenerateQRCode)
aftersalesRoutes.POST("/:serialNumber/submit", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), aftersalesController.SubmitForConfirmation)
// 仅管理员
aftersalesRoutes.POST("/:serialNumber/reassign", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), aftersalesController.Reassign)
aftersalesRoutes.POST("/:serialNumber/force-close", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), aftersalesController.ForceClose)
aftersalesRoutes.DELETE("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), aftersalesController.Delete)
}
// 项目工单路由
projectOrdersController := controllers.NewProjectOrdersController()
projectOrdersRoutes := r.Group("/project-orders")
{
// 公开(无需登录)
projectOrdersRoutes.GET("/:serialNumber/query", projectOrdersController.PublicQuery)
projectOrdersRoutes.POST("/:serialNumber/site-images", projectOrdersController.UploadSiteImages)
projectOrdersRoutes.POST("/:serialNumber/complete", projectOrdersController.EngineerComplete)
// 技术员 + 管理员
projectOrdersRoutes.POST("", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), projectOrdersController.Create)
projectOrdersRoutes.GET("", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), projectOrdersController.FindAll)
projectOrdersRoutes.GET("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), projectOrdersController.FindOne)
projectOrdersRoutes.PATCH("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), projectOrdersController.Update)
projectOrdersRoutes.POST("/:serialNumber/qrcode", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), projectOrdersController.GenerateQRCode)
projectOrdersRoutes.POST("/:serialNumber/submit", middleware.JWTAuthMiddleware(), middleware.TechnicianMiddleware(), projectOrdersController.SubmitCompletion)
// 仅管理员
projectOrdersRoutes.POST("/:serialNumber/reassign", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), projectOrdersController.Reassign)
projectOrdersRoutes.POST("/:serialNumber/force-close", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), projectOrdersController.ForceClose)
projectOrdersRoutes.DELETE("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), projectOrdersController.Delete)
}
}