mirror of
https://github.com/chaitin/MonkeyCode.git
synced 2026-02-02 06:43:23 +08:00
170 lines
5.0 KiB
Go
170 lines
5.0 KiB
Go
package v1
|
|
|
|
import (
|
|
"github.com/GoYoko/web"
|
|
|
|
"github.com/chaitin/MonkeyCode/backend/domain"
|
|
"github.com/chaitin/MonkeyCode/backend/internal/middleware"
|
|
)
|
|
|
|
type DashboardHandler struct {
|
|
usecase domain.DashboardUsecase
|
|
}
|
|
|
|
func NewDashboardHandler(
|
|
w *web.Web,
|
|
usecase domain.DashboardUsecase,
|
|
auth *middleware.AuthMiddleware,
|
|
active *middleware.ActiveMiddleware,
|
|
) *DashboardHandler {
|
|
h := &DashboardHandler{usecase: usecase}
|
|
|
|
g := w.Group("/api/v1/dashboard")
|
|
g.Use(auth.Auth(), active.Active("admin"))
|
|
g.GET("/statistics", web.BaseHandler(h.Statistics))
|
|
g.GET("/category-stat", web.BindHandler(h.CategoryStat))
|
|
g.GET("/time-stat", web.BindHandler(h.TimeStat))
|
|
g.GET("/user-stat", web.BindHandler(h.UserStat))
|
|
g.GET("/user-events", web.BaseHandler(h.UserEvents))
|
|
g.GET("/user-code-rank", web.BindHandler(h.UserCodeRank))
|
|
g.GET("/user-heatmap", web.BaseHandler(h.UserHeatmap))
|
|
|
|
return h
|
|
}
|
|
|
|
// Statistics 获取统计信息
|
|
//
|
|
// @Tags Dashboard
|
|
// @Summary 获取统计信息
|
|
// @Description 获取统计信息
|
|
// @ID statistics-dashboard
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} web.Resp{data=domain.Statistics}
|
|
// @Router /api/v1/dashboard/statistics [get]
|
|
func (h *DashboardHandler) Statistics(c *web.Context) error {
|
|
statistics, err := h.usecase.Statistics(c.Request().Context())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return c.Success(statistics)
|
|
}
|
|
|
|
// CategoryStat 获取分类统计信息
|
|
//
|
|
// @Tags Dashboard
|
|
// @Summary 获取分类统计信息
|
|
// @Description 获取分类统计信息
|
|
// @ID category-stat-dashboard
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param filter query domain.StatisticsFilter true "筛选参数"
|
|
// @Success 200 {object} web.Resp{data=domain.CategoryStat}
|
|
// @Router /api/v1/dashboard/category-stat [get]
|
|
func (h *DashboardHandler) CategoryStat(c *web.Context, req domain.StatisticsFilter) error {
|
|
categoryStat, err := h.usecase.CategoryStat(c.Request().Context(), req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return c.Success(categoryStat)
|
|
}
|
|
|
|
// TimeStat 获取时间统计信息
|
|
//
|
|
// @Tags Dashboard
|
|
// @Summary 获取时间统计信息
|
|
// @Description 获取时间统计信息
|
|
// @ID time-stat-dashboard
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param filter query domain.StatisticsFilter true "筛选参数"
|
|
// @Success 200 {object} web.Resp{data=domain.TimeStat}
|
|
// @Router /api/v1/dashboard/time-stat [get]
|
|
func (h *DashboardHandler) TimeStat(c *web.Context, req domain.StatisticsFilter) error {
|
|
timeStat, err := h.usecase.TimeStat(c.Request().Context(), req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return c.Success(timeStat)
|
|
}
|
|
|
|
// UserStat 获取用户统计信息
|
|
//
|
|
// @Tags Dashboard
|
|
// @Summary 获取用户统计信息
|
|
// @Description 获取用户统计信息
|
|
// @ID user-stat-dashboard
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param filter query domain.StatisticsFilter true "筛选参数"
|
|
// @Success 200 {object} web.Resp{data=domain.UserStat}
|
|
// @Router /api/v1/dashboard/user-stat [get]
|
|
func (h *DashboardHandler) UserStat(c *web.Context, req domain.StatisticsFilter) error {
|
|
userStat, err := h.usecase.UserStat(c.Request().Context(), req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return c.Success(userStat)
|
|
}
|
|
|
|
// UserEvents 获取用户事件
|
|
//
|
|
// @Tags Dashboard
|
|
// @Summary 获取用户事件
|
|
// @Description 获取用户事件
|
|
// @ID user-events-dashboard
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param filter query domain.StatisticsFilter true "筛选参数"
|
|
// @Success 200 {object} web.Resp{data=[]domain.UserEvent}
|
|
// @Router /api/v1/dashboard/user-events [get]
|
|
func (h *DashboardHandler) UserEvents(c *web.Context) error {
|
|
userEvents, err := h.usecase.UserEvents(c.Request().Context(), domain.StatisticsFilter{
|
|
Precision: "day",
|
|
Duration: 90,
|
|
UserID: c.QueryParam("user_id"),
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return c.Success(userEvents)
|
|
}
|
|
|
|
// UserCodeRank 用户贡献榜
|
|
//
|
|
// @Tags Dashboard
|
|
// @Summary 用户贡献榜
|
|
// @Description 用户贡献榜
|
|
// @ID user-code-rank-dashboard
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param filter query domain.StatisticsFilter true "筛选参数"
|
|
// @Success 200 {object} web.Resp{data=[]domain.UserCodeRank}
|
|
// @Router /api/v1/dashboard/user-code-rank [get]
|
|
func (h *DashboardHandler) UserCodeRank(c *web.Context, req domain.StatisticsFilter) error {
|
|
userCodeRank, err := h.usecase.UserCodeRank(c.Request().Context(), req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return c.Success(userCodeRank)
|
|
}
|
|
|
|
// UserHeatmap 用户热力图
|
|
//
|
|
// @Tags Dashboard
|
|
// @Summary 用户热力图
|
|
// @Description 用户热力图
|
|
// @ID user-heatmap-dashboard
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param user_id query string true "用户ID"
|
|
// @Success 200 {object} web.Resp{data=domain.UserHeatmapResp}
|
|
// @Router /api/v1/dashboard/user-heatmap [get]
|
|
func (h *DashboardHandler) UserHeatmap(c *web.Context) error {
|
|
userHeatmap, err := h.usecase.UserHeatmap(c.Request().Context(), c.QueryParam("user_id"))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return c.Success(userHeatmap)
|
|
}
|