Просмотр исходного кода

feat: 分页请求参数校验

runningwater 6 месяцев назад
Родитель
Сommit
10aea8caf1
3 измененных файлов с 61 добавлено и 13 удалено
  1. 5 0
      README.md
  2. 19 13
      app/http/controllers/api/v1/users_controller.go
  3. 37 0
      app/requests/pagination_request.go

+ 5 - 0
README.md

@@ -52,6 +52,7 @@ UNIQUE KEY `migration` (`migration`)
 
 #### 🐛 Bug 修复
 
+- Golangci-lint run fix
 - Readme.md
 - 删除测试的 testCommand
 - Panic Recovery
@@ -73,6 +74,10 @@ UNIQUE KEY `migration` (`migration`)
 
 #### 🚀 新功能
 
+- 分页请求参数校验
+- 用户列表分页
+- Paginator 分页功能
+- 用户列表
 - *(command)* Make seed 命令
 - *(command)* Make factory 命令
 - Facotry 和 Faker

+ 19 - 13
app/http/controllers/api/v1/users_controller.go

@@ -1,29 +1,35 @@
 package v1
 
 import (
-	"github.com/runningwater/gohub/app/models/user"
-	"github.com/runningwater/gohub/pkg/auth"
-	"github.com/runningwater/gohub/pkg/response"
+    "github.com/runningwater/gohub/app/models/user"
+    "github.com/runningwater/gohub/app/requests"
+    "github.com/runningwater/gohub/pkg/auth"
+    "github.com/runningwater/gohub/pkg/response"
 
-	"github.com/gin-gonic/gin"
+    "github.com/gin-gonic/gin"
 )
 
 type UsersController struct {
-	BaseApiController
+    BaseApiController
 }
 
 // CurrentUser 当前登录用户信息
 func (ctrl *UsersController) CurrentUser(c *gin.Context) {
-	users := auth.CurrentUser(c)
-	response.Data(c, users)
+    users := auth.CurrentUser(c)
+    response.Data(c, users)
 }
 
 // Index 所有用户
 func (ctrl *UsersController) Index(c *gin.Context) {
-	// data := user.All()
-	data, pager := user.Paginate(c, 2)
-	response.Data(c, gin.H{
-		"data":  data,
-		"pager": pager,
-	})
+    // data := user.All()
+    // 输入参数校验
+    request := requests.PaginationRequest{}
+    if ok := requests.Validate(c, &request, requests.Pagination); !ok {
+        return
+    }
+    data, pager := user.Paginate(c, 2)
+    response.Data(c, gin.H{
+        "data":  data,
+        "pager": pager,
+    })
 }

+ 37 - 0
app/requests/pagination_request.go

@@ -0,0 +1,37 @@
+// Author: simon (ynwdlxm@163.com)
+// Date: 2025/7/15 14:16
+// Desc: 分页请求验证器
+
+package requests
+
+import (
+    "github.com/gin-gonic/gin"
+    "github.com/thedevsaddam/govalidator"
+)
+
+type PaginationRequest struct {
+    Sort    string `valid:"sort" form:"sort"`
+    Order   string `valid:"order" form:"order"`
+    PerPage string `valid:"per_page" form:"per_page"`
+}
+
+func Pagination(data any, c *gin.Context) map[string][]string {
+    rules := govalidator.MapData{
+        "sort":     []string{"in:id,created_at,updated_at"},
+        "order":    []string{"in:asc,desc"},
+        "per_page": []string{"numeric_between:2,100"},
+    }
+    messages := govalidator.MapData{
+        "sort": []string{
+            "in:排序字段仅支持 id,created_at,updated_at",
+        },
+        "order": []string{
+            "in:排序规则仅支持 asc,desc",
+        },
+        "per_page": []string{
+            "numeric_between:每页条数的值介于 2~100 之间",
+        },
+    }
+
+    return validate(data, rules, messages)
+}