From b8e9af001f52943ed31d1ebf90ec9c68d7cb1ea0 Mon Sep 17 00:00:00 2001 From: long-agent Date: Fri, 8 May 2026 12:48:03 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=8F=90=E5=8F=96=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E5=88=86=E9=A1=B5=E8=A7=A3=E6=9E=90=E5=87=BD=E6=95=B0?= =?UTF-8?q?=20parsePageAndSize?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 internal/api/handler/common.go 存放 handler 层公共辅助函数 - parsePageAndSize: 统一提取 page/page_size 参数解析、默认值设置、ClampPageSize 调用 - device/log/webhook handler: 替换重复的分页解析代码为 parsePageAndSize 调用 - 清理不再需要的 strconv/pagination 导入 --- internal/api/handler/common.go | 21 +++++++++++++++++++++ internal/api/handler/device_handler.go | 15 ++------------- internal/api/handler/log_handler.go | 16 ++-------------- internal/api/handler/webhook_handler.go | 11 ++--------- 4 files changed, 27 insertions(+), 36 deletions(-) create mode 100644 internal/api/handler/common.go 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 {