Files
hr_data_analyzer/routes/routes.go
T
2026-04-29 16:56:34 +08:00

104 lines
4.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package routes
import (
"github.com/gin-gonic/gin"
"hr_receiver/controllers"
"hr_receiver/middleware"
"net/http"
)
func SetupRouter() *gin.Engine {
jwtService := middleware.NewJWTService(middleware.ApiSecret, middleware.TokenExp)
r := gin.Default()
r.Use(middleware.GzipMiddleware())
trainingController := controllers.NewTrainingController()
stepTrainController := controllers.NewStepTrainingController()
lessonPlanController := controllers.NewLessonPlanController()
kindergartenAdminController := controllers.NewKindergartenAdminController()
userAdminController := controllers.NewUserAdminController()
gatewayController := controllers.NewGatewayAdminController()
systemDebugController := controllers.NewSystemDebugController()
deviceTokenHandler := func(c *gin.Context) {
clientSecret := c.GetHeader("X-API-Key")
if clientSecret != middleware.ApiSecret {
c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid secret"})
return
}
token, err := jwtService.GenerateToken()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to generate token"})
return
}
c.JSON(http.StatusOK, gin.H{
"token": token,
"tokenType": "device",
})
}
r.GET("/auth/token", deviceTokenHandler)
v1 := r.Group("/api/v1")
{
records := v1.Group("/train-records") //.Use(middleware.AuthMiddleware())
{
records.POST("", trainingController.CreateTrainingRecord)
records.GET("/analysis", trainingController.HandleCurveAnalysis)
records.POST("/analysis-by-ai", trainingController.AnalyzeByAI)
// 可扩展其他路由GET, PUT, DELETE等
}
steps := v1.Group("/step").Use(middleware.JWTAuth(), middleware.RequireStepTrainingAccess())
{
steps.POST("", stepTrainController.CreateTrainingRecord)
steps.GET("train-records", stepTrainController.GetTrainingRecords)
steps.GET("train-data/:trainId", stepTrainController.GetTrainingRecordByTrainId)
steps.GET("train-rank/:trainId", stepTrainController.GetTrainingRank)
// 可扩展其他路由GET, PUT, DELETE等
}
lessonPlans := v1.Group("/lesson-plans").Use(middleware.JWTAuth())
{
lessonPlans.POST("/upload", middleware.RequireHeartRateOperatorOrHigher(), lessonPlanController.Upload)
lessonPlans.GET("", middleware.RequireHeartRateOperatorOrHigher(), lessonPlanController.List)
lessonPlans.GET("/page", middleware.RequireHeartRateOperatorOrHigher(), lessonPlanController.Page)
lessonPlans.GET("/:id/download", lessonPlanController.Download)
lessonPlans.POST("/:id/share-code", lessonPlanController.GenerateShareCode)
lessonPlans.DELETE("/:id", lessonPlanController.Delete)
}
admin := v1.Group("/admin").Use(middleware.JWTAuth(), middleware.RequireSuperAdmin())
{
admin.GET("/kindergartens", kindergartenAdminController.List)
admin.POST("/kindergartens", kindergartenAdminController.Create)
admin.PUT("/kindergartens/:id", kindergartenAdminController.Update)
admin.DELETE("/kindergartens/:id", kindergartenAdminController.Delete)
admin.GET("/users", userAdminController.List)
admin.POST("/users", userAdminController.Create)
admin.PUT("/users/:id", userAdminController.Update)
admin.DELETE("/users/:id", userAdminController.Delete)
admin.GET("/gateways", gatewayController.List)
admin.POST("/gateways", gatewayController.Create)
admin.PUT("/gateways/:id", gatewayController.Update)
admin.DELETE("/gateways/:id", gatewayController.Delete)
admin.GET("/system-debug/mqtt/status", systemDebugController.MqttStatus)
admin.POST("/system-debug/mqtt/start", systemDebugController.StartMqtt)
admin.POST("/system-debug/mqtt/stop", systemDebugController.StopMqtt)
}
v1.GET("/admin/system-debug/mqtt/ws", systemDebugController.MqttWebSocket)
v1.GET("/lesson-plans/share/:code/download", lessonPlanController.DownloadByShareCode)
public := v1.Group("")
{
public.POST("/register", controllers.Register)
public.POST("/login", controllers.Login)
}
auth := v1.Group("/auth")
{
auth.GET("/token", deviceTokenHandler)
}
}
return r
}