package handler import ( "strconv" "with_you/internal/pkg/response" "with_you/internal/service" "github.com/gin-gonic/gin" ) // AdminDashboardHandler 管理端仪表盘处理器 type AdminDashboardHandler struct { dashboardService service.AdminDashboardService } // NewAdminDashboardHandler 创建管理端仪表盘处理器 func NewAdminDashboardHandler(dashboardService service.AdminDashboardService) *AdminDashboardHandler { return &AdminDashboardHandler{ dashboardService: dashboardService, } } // GetStats 获取统计数据 // GET /api/v1/admin/dashboard/stats func (h *AdminDashboardHandler) GetStats(c *gin.Context) { stats, err := h.dashboardService.GetStats(c.Request.Context()) if err != nil { response.InternalServerError(c, "failed to get dashboard stats") return } response.Success(c, stats) } // GetUserActivityTrend 获取用户活跃度趋势 // GET /api/v1/admin/dashboard/user-activity func (h *AdminDashboardHandler) GetUserActivityTrend(c *gin.Context) { // 解析天数参数,默认7天,限制在1-30天 days, _ := strconv.Atoi(c.DefaultQuery("days", "7")) days = min(max(days, 1), 30) trend, err := h.dashboardService.GetUserActivityTrend(c.Request.Context(), days) if err != nil { response.InternalServerError(c, "failed to get user activity trend") return } response.Success(c, trend) } // GetContentStats 获取内容统计 // GET /api/v1/admin/dashboard/content-stats func (h *AdminDashboardHandler) GetContentStats(c *gin.Context) { stats, err := h.dashboardService.GetContentStats(c.Request.Context()) if err != nil { response.InternalServerError(c, "failed to get content stats") return } response.Success(c, stats) } // GetPendingContent 获取待审核内容 // GET /api/v1/admin/dashboard/pending-content func (h *AdminDashboardHandler) GetPendingContent(c *gin.Context) { // 解析limit参数,默认10条,限制在1-50条 limit, _ := strconv.Atoi(c.DefaultQuery("limit", "10")) limit = min(max(limit, 1), 50) content, err := h.dashboardService.GetPendingContent(c.Request.Context(), limit) if err != nil { response.InternalServerError(c, "failed to get pending content") return } response.Success(c, content) } // GetOnlineUsers 获取在线用户数 // GET /api/v1/admin/dashboard/online-users func (h *AdminDashboardHandler) GetOnlineUsers(c *gin.Context) { onlineUsers, err := h.dashboardService.GetOnlineUsers(c.Request.Context()) if err != nil { response.InternalServerError(c, "failed to get online users count") return } response.Success(c, onlineUsers) }