Files
backend-go/routes/routes.go
T
2026-06-05 17:21:06 +08:00

154 lines
10 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)
}
// 序列号路由
serialsController := controllers.NewSerialsController()
serialsRoutes := r.Group("/serials")
{
serialsRoutes.PATCH("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), serialsController.Update)
serialsRoutes.POST("/generate", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), serialsController.Generate)
serialsRoutes.POST("/generate-with-prefix", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), serialsController.GenerateWithPrefix)
serialsRoutes.POST("/:serialNumber/qrcode", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), serialsController.GenerateQRCode)
serialsRoutes.GET("/:serialNumber/query", serialsController.Query)
serialsRoutes.GET("/", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), serialsController.FindAll)
serialsRoutes.PUT("/:serialNumber", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), serialsController.Update)
serialsRoutes.POST("/:serialNumber/revoke", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), serialsController.Revoke)
}
// 企业管理路由
companiesController := controllers.NewCompaniesController()
companiesRoutes := r.Group("/companies")
{
companiesRoutes.GET("/stats/overview", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), companiesController.StatsOverview)
companiesRoutes.GET("/", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), companiesController.FindAll)
companiesRoutes.GET("/:companyName", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), companiesController.FindOne)
companiesRoutes.POST("/", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), companiesController.Create)
companiesRoutes.PATCH("/:companyName", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), companiesController.Update)
companiesRoutes.PUT("/:companyName", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), companiesController.Update)
companiesRoutes.DELETE("/:companyName/serials/:serialNumber", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), companiesController.DeleteSerial)
companiesRoutes.POST("/:companyName/revoke", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), companiesController.Revoke)
companiesRoutes.DELETE("/:companyName", middleware.JWTAuthMiddleware(), middleware.AdminMiddleware(), companiesController.Delete)
}
// 产品溯源路由
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)
}
}