package routes import ( "tyapi-server/internal/infrastructure/http/handlers" sharedhttp "tyapi-server/internal/shared/http" "tyapi-server/internal/shared/middleware" "go.uber.org/zap" ) // StatisticsRoutes 统计路由 type StatisticsRoutes struct { statisticsHandler *handlers.StatisticsHandler auth *middleware.JWTAuthMiddleware optionalAuth *middleware.OptionalAuthMiddleware admin *middleware.AdminAuthMiddleware logger *zap.Logger } // NewStatisticsRoutes 创建统计路由 func NewStatisticsRoutes( statisticsHandler *handlers.StatisticsHandler, auth *middleware.JWTAuthMiddleware, optionalAuth *middleware.OptionalAuthMiddleware, admin *middleware.AdminAuthMiddleware, logger *zap.Logger, ) *StatisticsRoutes { return &StatisticsRoutes{ statisticsHandler: statisticsHandler, auth: auth, optionalAuth: optionalAuth, admin: admin, logger: logger, } } // Register 注册统计相关路由 func (r *StatisticsRoutes) Register(router *sharedhttp.GinRouter) { engine := router.GetEngine() // ================ 用户端统计路由 ================ // 统计公开接口 statistics := engine.Group("/api/v1/statistics") { // 获取公开统计信息 statistics.GET("/public", r.statisticsHandler.GetPublicStatistics) } // 用户统计接口 - 需要认证 userStats := engine.Group("/api/v1/statistics", r.auth.Handle()) { // 获取用户统计信息 userStats.GET("/user", r.statisticsHandler.GetUserStatistics) // 独立统计接口(用户只能查询自己的数据) userStats.GET("/api-calls", r.statisticsHandler.GetApiCallsStatistics) userStats.GET("/consumption", r.statisticsHandler.GetConsumptionStatistics) userStats.GET("/recharge", r.statisticsHandler.GetRechargeStatistics) // 获取最新产品推荐 userStats.GET("/latest-products", r.statisticsHandler.GetLatestProducts) // 获取指标列表 userStats.GET("/metrics", r.statisticsHandler.GetMetrics) // 获取指标详情 userStats.GET("/metrics/:id", r.statisticsHandler.GetMetricDetail) // 获取仪表板列表 userStats.GET("/dashboards", r.statisticsHandler.GetDashboards) // 获取仪表板详情 userStats.GET("/dashboards/:id", r.statisticsHandler.GetDashboardDetail) // 获取仪表板数据 userStats.GET("/dashboards/:id/data", r.statisticsHandler.GetDashboardData) // 获取报告列表 userStats.GET("/reports", r.statisticsHandler.GetReports) // 获取报告详情 userStats.GET("/reports/:id", r.statisticsHandler.GetReportDetail) // 创建报告 userStats.POST("/reports", r.statisticsHandler.CreateReport) } // ================ 管理员统计路由 ================ // 管理员路由组 adminGroup := engine.Group("/api/v1/admin") adminGroup.Use(r.admin.Handle()) // 管理员权限验证 { // 统计指标管理 metrics := adminGroup.Group("/statistics/metrics") { metrics.GET("", r.statisticsHandler.AdminGetMetrics) metrics.POST("", r.statisticsHandler.AdminCreateMetric) metrics.PUT("/:id", r.statisticsHandler.AdminUpdateMetric) metrics.DELETE("/:id", r.statisticsHandler.AdminDeleteMetric) } // 仪表板管理 dashboards := adminGroup.Group("/statistics/dashboards") { dashboards.GET("", r.statisticsHandler.AdminGetDashboards) dashboards.POST("", r.statisticsHandler.AdminCreateDashboard) dashboards.PUT("/:id", r.statisticsHandler.AdminUpdateDashboard) dashboards.DELETE("/:id", r.statisticsHandler.AdminDeleteDashboard) } // 报告管理 reports := adminGroup.Group("/statistics/reports") { reports.GET("", r.statisticsHandler.AdminGetReports) } // 系统统计 system := adminGroup.Group("/statistics/system") { system.GET("", r.statisticsHandler.AdminGetSystemStatistics) } // 独立域统计接口 domainStats := adminGroup.Group("/statistics") { domainStats.GET("/user-domain", r.statisticsHandler.AdminGetUserDomainStatistics) domainStats.GET("/api-domain", r.statisticsHandler.AdminGetApiDomainStatistics) domainStats.GET("/consumption-domain", r.statisticsHandler.AdminGetConsumptionDomainStatistics) domainStats.GET("/recharge-domain", r.statisticsHandler.AdminGetRechargeDomainStatistics) } // 排行榜接口 rankings := adminGroup.Group("/statistics") { rankings.GET("/user-call-ranking", r.statisticsHandler.AdminGetUserCallRanking) rankings.GET("/recharge-ranking", r.statisticsHandler.AdminGetRechargeRanking) rankings.GET("/api-popularity-ranking", r.statisticsHandler.AdminGetApiPopularityRanking) rankings.GET("/today-certified-enterprises", r.statisticsHandler.AdminGetTodayCertifiedEnterprises) } // 用户统计 userStats := adminGroup.Group("/statistics/users") { userStats.GET("/:user_id", r.statisticsHandler.AdminGetUserStatistics) } // 独立统计接口(管理员可查询任意用户) independentStats := adminGroup.Group("/statistics") { independentStats.GET("/api-calls", r.statisticsHandler.GetApiCallsStatistics) independentStats.GET("/consumption", r.statisticsHandler.GetConsumptionStatistics) independentStats.GET("/recharge", r.statisticsHandler.GetRechargeStatistics) } // 数据聚合 aggregation := adminGroup.Group("/statistics/aggregation") { aggregation.POST("/trigger", r.statisticsHandler.AdminTriggerAggregation) } } r.logger.Info("统计路由注册完成") }