feat(supervisor): add reminder settings and rate-limited logs
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"wx_service/internal/middleware"
|
||||
"wx_service/internal/model"
|
||||
service "wx_service/internal/quitcheckin/service"
|
||||
)
|
||||
|
||||
// GetReminderSettings GET /api/v2/supervisor/reminders/settings
|
||||
// owner 读取自己的提醒设置。
|
||||
func (h *Handler) GetReminderSettings(c *gin.Context) {
|
||||
user := middleware.MustCurrentUser(c)
|
||||
|
||||
res, err := h.service.GetReminderSettings(c.Request.Context(), int(user.ID))
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, model.Error(http.StatusInternalServerError, "获取提醒设置失败,请稍后重试"))
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, model.Success(res))
|
||||
}
|
||||
|
||||
type updateReminderSettingsRequest struct {
|
||||
Enabled *bool `json:"enabled"`
|
||||
NotifyTime *string `json:"notify_time"`
|
||||
MaxPerDay *int `json:"max_per_day"`
|
||||
}
|
||||
|
||||
// UpdateReminderSettings PUT /api/v2/supervisor/reminders/settings
|
||||
func (h *Handler) UpdateReminderSettings(c *gin.Context) {
|
||||
user := middleware.MustCurrentUser(c)
|
||||
|
||||
var req updateReminderSettingsRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
c.JSON(http.StatusBadRequest, model.Error(http.StatusBadRequest, "请求参数错误"))
|
||||
return
|
||||
}
|
||||
|
||||
// basic trim
|
||||
if req.NotifyTime != nil {
|
||||
v := strings.TrimSpace(*req.NotifyTime)
|
||||
req.NotifyTime = &v
|
||||
}
|
||||
|
||||
res, err := h.service.UpdateReminderSettings(c.Request.Context(), int(user.ID), service.UpdateReminderSettingsRequest{
|
||||
Enabled: req.Enabled,
|
||||
NotifyTime: req.NotifyTime,
|
||||
MaxPerDay: req.MaxPerDay,
|
||||
}, time.Now())
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, model.Error(http.StatusBadRequest, "保存提醒设置失败"))
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, model.Success(res))
|
||||
}
|
||||
|
||||
// RunReminders POST /api/v2/supervisor/reminders/run
|
||||
// supervisor 手动触发提醒(开发/测试用):只会给“当前用户作为监督人”的绑定关系写 reminder_log。
|
||||
func (h *Handler) RunReminders(c *gin.Context) {
|
||||
user := middleware.MustCurrentUser(c)
|
||||
|
||||
res, err := h.service.RunMissedCheckinRemindersForSupervisor(c.Request.Context(), int(user.ID), time.Now())
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, model.Error(http.StatusInternalServerError, "触发提醒失败,请稍后重试"))
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, model.Success(res))
|
||||
}
|
||||
Reference in New Issue
Block a user