diff --git a/internal/api/handler/common.go b/internal/api/handler/common.go new file mode 100644 index 0000000..3425ef4 --- /dev/null +++ b/internal/api/handler/common.go @@ -0,0 +1,21 @@ +package handler + +import ( + "strconv" + + "github.com/gin-gonic/gin" + + "github.com/user-management-system/internal/pagination" +) + +// parsePageAndSize extracts and validates page & page_size from query parameters. +// Returns page (>=1) and pageSize (clamped to [1, MaxPageSize]). +func parsePageAndSize(c *gin.Context) (page, pageSize int) { + page, _ = strconv.Atoi(c.DefaultQuery("page", "1")) + if page < 1 { + page = 1 + } + pageSize, _ = strconv.Atoi(c.DefaultQuery("page_size", strconv.Itoa(pagination.DefaultPageSize))) + pageSize = pagination.ClampPageSize(pageSize) + return +} diff --git a/internal/api/handler/device_handler.go b/internal/api/handler/device_handler.go index aeb006a..c09ad83 100644 --- a/internal/api/handler/device_handler.go +++ b/internal/api/handler/device_handler.go @@ -10,7 +10,6 @@ import ( "github.com/user-management-system/internal/api/middleware" "github.com/user-management-system/internal/domain" - "github.com/user-management-system/internal/pagination" "github.com/user-management-system/internal/service" ) @@ -88,12 +87,7 @@ func (h *DeviceHandler) GetMyDevices(c *gin.Context) { return } - page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) - if page < 1 { - page = 1 - } - pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", strconv.Itoa(pagination.DefaultPageSize))) - pageSize = pagination.ClampPageSize(pageSize) + page, pageSize := parsePageAndSize(c) devices, total, err := h.deviceService.GetUserDevices(c.Request.Context(), userID, page, pageSize) if err != nil { @@ -317,12 +311,7 @@ func (h *DeviceHandler) GetUserDevices(c *gin.Context) { return } - page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) - if page < 1 { - page = 1 - } - pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", strconv.Itoa(pagination.DefaultPageSize))) - pageSize = pagination.ClampPageSize(pageSize) + page, pageSize := parsePageAndSize(c) devices, total, err := h.deviceService.GetUserDevices(c.Request.Context(), userID, page, pageSize) if err != nil { diff --git a/internal/api/handler/log_handler.go b/internal/api/handler/log_handler.go index dc999a5..49a2cb0 100644 --- a/internal/api/handler/log_handler.go +++ b/internal/api/handler/log_handler.go @@ -3,11 +3,9 @@ package handler import ( "fmt" "net/http" - "strconv" "github.com/gin-gonic/gin" - "github.com/user-management-system/internal/pagination" "github.com/user-management-system/internal/service" ) @@ -43,12 +41,7 @@ func (h *LogHandler) GetMyLoginLogs(c *gin.Context) { return } - page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) - if page < 1 { - page = 1 - } - pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", strconv.Itoa(pagination.DefaultPageSize))) - pageSize = pagination.ClampPageSize(pageSize) + page, pageSize := parsePageAndSize(c) logs, total, err := h.loginLogService.GetMyLoginLogs(c.Request.Context(), userID, page, pageSize) if err != nil { @@ -86,12 +79,7 @@ func (h *LogHandler) GetMyOperationLogs(c *gin.Context) { return } - page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) - if page < 1 { - page = 1 - } - pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", strconv.Itoa(pagination.DefaultPageSize))) - pageSize = pagination.ClampPageSize(pageSize) + page, pageSize := parsePageAndSize(c) logs, total, err := h.operationLogService.GetMyOperationLogs(c.Request.Context(), userID, page, pageSize) if err != nil { diff --git a/internal/api/handler/webhook_handler.go b/internal/api/handler/webhook_handler.go index 08a4bb6..fbb99c3 100644 --- a/internal/api/handler/webhook_handler.go +++ b/internal/api/handler/webhook_handler.go @@ -66,12 +66,7 @@ func (h *WebhookHandler) CreateWebhook(c *gin.Context) { // @Failure 500 {object} Response "服务器错误" // @Router /api/v1/webhooks [get] func (h *WebhookHandler) ListWebhooks(c *gin.Context) { - page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) - if page < 1 { - page = 1 - } - pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", strconv.Itoa(pagination.DefaultPageSize))) - pageSize = pagination.ClampPageSize(pageSize) + page, pageSize := parsePageAndSize(c) offset := (page - 1) * pageSize userID, _ := c.Get("user_id") @@ -178,9 +173,7 @@ func (h *WebhookHandler) GetWebhookDeliveries(c *gin.Context) { } limit, _ := strconv.Atoi(c.DefaultQuery("limit", strconv.Itoa(pagination.DefaultPageSize))) - if limit < 1 || limit > pagination.MaxPageSize { - limit = pagination.DefaultPageSize - } + limit = pagination.ClampPageSize(limit) deliveries, err := h.webhookService.GetWebhookDeliveries(c.Request.Context(), id, limit) if err != nil {