低空智控平台 后端go
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.
 
 

211 lines
8.0 KiB

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("/pay/wx/callback", handler.AGPayCallback)
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("/traffic-packages", handler.ListTrafficPackages)
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.DELETE("/traffic/orders/:id", handler.CancelTrafficOrder)
account.POST("/payments", handler.CreateWechatPayment)
account.GET("/payments/:id", handler.GetPaymentTransaction)
account.GET("/sim-cards", handler.ListSimCards)
account.GET("/sim-cards/:id", handler.GetSimCard)
account.GET("/sim-packages", handler.ListSimPackages)
account.POST("/sim-cards/:id/recharge-orders", handler.CreateSimRechargeOrder)
account.GET("/sim-recharge-orders/:id", handler.GetSimRechargeOrder)
account.DELETE("/sim-recharge-orders/:id", handler.CancelSimRechargeOrder)
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.POST("/test-grants", handler.GrantTrafficForTest)
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)
}