Files
wx_service/internal/admin/handler/quit_checkin_admin_handler.go
T
2026-04-07 22:10:31 +08:00

93 lines
2.5 KiB
Go

package handler
import (
"net/http"
"strings"
"github.com/gin-gonic/gin"
adminservice "wx_service/internal/admin/service"
"wx_service/internal/model"
)
type quitDailyListQuery struct {
Page int `form:"page"`
PageSize int `form:"page_size"`
UID int `form:"uid"`
DateFrom string `form:"date_from"`
DateTo string `form:"date_to"`
}
// ListQuitDailyStatuses GET /api/admin/quit-checkin/daily-statuses
func (h *Handler) ListQuitDailyStatuses(c *gin.Context) {
var query quitDailyListQuery
if err := c.ShouldBindQuery(&query); err != nil {
c.JSON(http.StatusBadRequest, model.Error(http.StatusBadRequest, "invalid query"))
return
}
if query.Page == 0 {
query.Page = 1
}
if query.PageSize == 0 {
query.PageSize = 20
}
dateFrom, err := parseDateOnly(query.DateFrom)
if err != nil {
c.JSON(http.StatusBadRequest, model.Error(http.StatusBadRequest, "invalid date_from, expected YYYY-MM-DD"))
return
}
dateTo, err := parseDateOnly(query.DateTo)
if err != nil {
c.JSON(http.StatusBadRequest, model.Error(http.StatusBadRequest, "invalid date_to, expected YYYY-MM-DD"))
return
}
data, err := h.svc.ListQuitDailyStatuses(c.Request.Context(), adminservice.ListQuitDailyStatusesQuery{
Page: query.Page,
PageSize: query.PageSize,
UID: query.UID,
DateFrom: dateFrom,
DateTo: dateTo,
})
if err != nil {
c.JSON(http.StatusInternalServerError, model.Error(http.StatusInternalServerError, "load quit daily statuses failed"))
return
}
c.JSON(http.StatusOK, model.Success(data))
}
type quitRewardGoalsListQuery struct {
Page int `form:"page"`
PageSize int `form:"page_size"`
UID int `form:"uid"`
Status string `form:"status"`
}
// ListQuitRewardGoals GET /api/admin/quit-checkin/reward-goals
func (h *Handler) ListQuitRewardGoals(c *gin.Context) {
var query quitRewardGoalsListQuery
if err := c.ShouldBindQuery(&query); err != nil {
c.JSON(http.StatusBadRequest, model.Error(http.StatusBadRequest, "invalid query"))
return
}
if query.Page == 0 {
query.Page = 1
}
if query.PageSize == 0 {
query.PageSize = 20
}
data, err := h.svc.ListQuitRewardGoals(c.Request.Context(), adminservice.ListQuitRewardGoalsQuery{
Page: query.Page,
PageSize: query.PageSize,
UID: query.UID,
Status: strings.TrimSpace(query.Status),
})
if err != nil {
c.JSON(http.StatusInternalServerError, model.Error(http.StatusInternalServerError, "load reward goals failed"))
return
}
c.JSON(http.StatusOK, model.Success(data))
}