package route import ( "github.com/gin-gonic/gin" "laic-backend/common" "laic-backend/handler" "laic-backend/logger" "laic-backend/middleware" "laic-backend/websocket" ) // InitRouter 初始化 gin 引擎与路由注册 func InitRouter(port int32) { common.Server(true) common.SetWriter(logger.GetLogWriter()) engine := common.GetEngine() engine.Use(middleware.TraceMiddleware(), middleware.CORSMiddleware(), middleware.DefaultLogMiddleware(), middleware.RateLimitMiddleware(300, 60)) // 健康检查 engine.GET("/health", func(c *gin.Context) { common.OKWithData(c, gin.H{"status": "up"}) }) // 阿里云直播回调使用独立令牌鉴权,不能进入用户 JWT 或操作日志中间件。 engine.POST("/internal/callbacks/aliyun/live", handler.HandleAliyunLiveCallback) // v1 业务路由 v1 := common.RouteGroup("/v1") v1.Use(middleware.OperationLogMiddleware()) // 实时监控 WS(设备状态 + 告警推送) v1.GET("/ws/monitor", middleware.AuthMiddleware(), websocket.HandleMonitor) // 认证(公开) auth := v1.Group("/auth") { auth.GET("/captcha", handler.Captcha) auth.POST("/register", handler.Register) auth.POST("/login", handler.Login) auth.POST("/refresh", handler.Refresh) auth.POST("/sms-code", handler.SmsCode) auth.POST("/reset-password", handler.ResetPassword) auth.POST("/logout", middleware.AuthMiddleware(), handler.Logout) } // 账户中心(资料 / 流量 / SIM 卡) account := v1.Group("/account", middleware.AuthMiddleware()) { account.GET("/profile", handler.GetProfile) account.PUT("/profile", handler.UpdateProfile) account.GET("/traffic/balance", handler.GetTrafficBalance) account.GET("/resource-summary", handler.GetResourceSummary) account.GET("/downloads", handler.GetDownloadPage) account.GET("/traffic/usage", handler.GetUsagePage) account.GET("/traffic/orders", handler.GetOrderPage) account.POST("/traffic/orders", handler.CreateTrafficOrder) account.POST("/traffic/orders/:id/pay", middleware.AdminMiddleware(), handler.PayTrafficOrder) account.GET("/sim-cards", handler.ListSimCards) account.GET("/sim-recharge-logs", handler.GetSimRechargeLogPage) account.POST("/security/change-password", handler.ChangePassword) account.GET("/security/sessions", handler.ListSessions) account.DELETE("/security/sessions", handler.RevokeOtherSessions) account.DELETE("/security/sessions/:id", handler.RevokeSession) account.GET("/invoice-profiles", handler.ListInvoiceProfiles) account.POST("/invoice-profiles", handler.SaveInvoiceProfile) account.PUT("/invoice-profiles/:id", handler.SaveInvoiceProfile) account.DELETE("/invoice-profiles/:id", handler.DeleteInvoiceProfile) account.GET("/invoice-orders", handler.ListInvoiceOrders) account.GET("/invoice-requests", handler.ListInvoiceRequests) account.POST("/invoice-requests", handler.CreateInvoiceRequest) account.PUT("/invoice-requests/:id/review", middleware.AdminMiddleware(), handler.ReviewInvoiceRequest) } // 机巢 & 无人机 docks := v1.Group("/docks", middleware.AuthMiddleware()) { docks.GET("", handler.GetDockPage) docks.POST("", handler.CreateDock) docks.GET("/:id", handler.GetDock) docks.PUT("/:id", handler.UpdateDock) docks.DELETE("/:id", handler.DeleteDock) docks.GET("/:id/status", handler.GetDockStatus) docks.POST("/:id/command", handler.DispatchCommand) docks.POST("/:id/firmware/upgrade", handler.UpgradeFirmware) } drones := v1.Group("/drones", middleware.AuthMiddleware()) { drones.GET("", handler.GetDronePage) drones.GET("/:id", handler.GetDrone) drones.PUT("/:id", handler.UpdateDrone) drones.DELETE("/:id", handler.DeleteDrone) drones.GET("/:id/telemetry", handler.GetDroneTelemetry) } // 告警 alarms := v1.Group("/alarms", middleware.AuthMiddleware()) { alarms.GET("", handler.GetAlarmPage) alarms.PUT("/:id/acknowledge", handler.AcknowledgeAlarm) alarms.PUT("/:id/resolve", handler.ResolveAlarm) } // 指令历史 commands := v1.Group("/commands", middleware.AuthMiddleware()) { commands.GET("", handler.GetCommandPage) commands.GET("/:id", handler.GetCommand) } // 航线 routes := v1.Group("/routes", middleware.AuthMiddleware()) { routes.GET("", handler.GetRoutePage) routes.POST("", handler.CreateRoute) routes.GET("/:id", handler.GetRoute) routes.PUT("/:id", handler.UpdateRoute) routes.DELETE("/:id", handler.DeleteRoute) } // 任务 tasks := v1.Group("/tasks", middleware.AuthMiddleware()) { tasks.GET("", handler.GetTaskPage) tasks.POST("", handler.CreateTask) tasks.GET("/:id", handler.GetTask) tasks.PUT("/:id", handler.UpdateTask) tasks.DELETE("/:id", handler.DeleteTask) tasks.POST("/:id/execute", handler.ExecuteTask) } // 执行记录 executions := v1.Group("/executions", middleware.AuthMiddleware()) { executions.GET("", handler.GetExecutionPage) executions.GET("/:id", handler.GetExecution) executions.GET("/:id/trajectory", handler.GetTrajectory) } // 已发布固件列表(普通用户可选升级,无需 admin) v1.GET("/firmwares/released", middleware.AuthMiddleware(), handler.GetReleasedFirmwares) // 固件管理(admin) firmwares := v1.Group("/firmwares", middleware.AuthMiddleware(), middleware.AdminMiddleware()) { firmwares.GET("", handler.GetFirmwarePage) firmwares.GET("/:id", handler.GetFirmware) firmwares.POST("", handler.CreateFirmware) firmwares.PUT("/:id", handler.UpdateFirmware) firmwares.DELETE("/:id", handler.DeleteFirmware) } // 直播 live := v1.Group("/live", middleware.AuthMiddleware()) { live.GET("", handler.GetLivePage) live.POST("/:dockId/start", handler.StartLive) live.POST("/:dockId/stop", handler.StopLive) live.GET("/:dockId/play-url", handler.GetLivePlayURL) live.POST("/:dockId/sessions", handler.CreateLiveSession) live.GET("/:dockId/sessions/:streamSessionId", handler.GetLiveSession) live.POST("/:dockId/sessions/:streamSessionId/heartbeat", handler.HeartbeatLiveSession) live.DELETE("/:dockId/sessions/:streamSessionId/viewers/me", handler.LeaveLiveSession) } // 视频(OSS 上传/下载) videos := v1.Group("/videos", middleware.AuthMiddleware()) { videos.POST("", handler.CreateVideoUpload) videos.POST("/:id/complete", handler.CompleteVideoUpload) videos.GET("", handler.GetVideoPage) videos.GET("/:id", handler.GetVideo) videos.POST("/:id/download", handler.DownloadVideo) } // 平台流量资源与套餐管理(admin) trafficAdmin := v1.Group("/admin/traffic", middleware.AuthMiddleware(), middleware.AdminMiddleware()) { trafficAdmin.GET("/pool", handler.GetPlatformResourcePool) trafficAdmin.POST("/purchases", handler.CreatePlatformPurchase) trafficAdmin.GET("/purchases", handler.GetPlatformPurchasePage) trafficAdmin.GET("/packages", handler.GetTrafficPackagePage) trafficAdmin.POST("/packages", handler.CreateTrafficPackage) trafficAdmin.PUT("/packages/:id", handler.UpdateTrafficPackage) trafficAdmin.DELETE("/packages/:id", handler.DeleteTrafficPackage) trafficAdmin.GET("/ledger", handler.GetTrafficLedgerPage) } // 系统管理(admin) users := v1.Group("/users", middleware.AuthMiddleware(), middleware.AdminMiddleware()) { users.GET("", handler.GetUserPage) users.POST("", handler.CreateUser) users.PUT("/:id", handler.UpdateUser) users.DELETE("/:id", handler.DeleteUser) } v1.GET("/roles", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handler.GetRoles) v1.GET("/logs/operation", middleware.AuthMiddleware(), handler.GetOperationLogPage) }