Bläddra i källkod

enhance(cosy): pagination list

0xJacky 1 år sedan
förälder
incheckning
526fedd04a
1 ändrade filer med 46 tillägg och 44 borttagningar
  1. 46 44
      api/cosy/list.go

+ 46 - 44
api/cosy/list.go

@@ -99,50 +99,52 @@ func (c *Ctx[T]) ListAllData() (data any, ok bool) {
 }
 
 func (c *Ctx[T]) PagingListData() (*model.DataList, bool) {
-	result, ok := c.result()
-	if !ok {
-		return nil, false
-	}
-
-	scopesResult := result.Session(&gorm.Session{}).Scopes(c.OrderAndPaginate())
-	data := &model.DataList{}
-	if c.scan == nil {
-		models := make([]*T, 0)
-		scopesResult.Find(&models)
-
-		if c.transformer != nil {
-			transformed := make([]any, 0)
-			for k := range models {
-				transformed = append(transformed, c.transformer(models[k]))
-			}
-			data.Data = transformed
-		} else {
-			data.Data = models
-		}
-	} else {
-		data.Data = c.scan(scopesResult)
-	}
-
-	var totalRecords int64
-	result.Session(&gorm.Session{}).Count(&totalRecords)
-
-	page := cast.ToInt(c.ctx.Query("page"))
-	if page == 0 {
-		page = 1
-	}
-
-	pageSize := settings.ServerSettings.PageSize
-	if reqPageSize := c.ctx.Query("page_size"); reqPageSize != "" {
-		pageSize = cast.ToInt(reqPageSize)
-	}
-
-	data.Pagination = model.Pagination{
-		Total:       totalRecords,
-		PerPage:     pageSize,
-		CurrentPage: page,
-		TotalPages:  model.TotalPage(totalRecords, pageSize),
-	}
-	return data, true
+    result, ok := c.result()
+    if !ok {
+        return nil, false
+    }
+
+    scopesResult := result.Scopes(c.OrderAndPaginate())
+    data := &model.DataList{}
+    if c.scan == nil {
+        models := make([]*T, 0)
+        scopesResult.Find(&models)
+
+        if c.transformer != nil {
+            transformed := make([]any, 0)
+            for k := range models {
+                transformed = append(transformed, c.transformer(models[k]))
+            }
+            data.Data = transformed
+        } else {
+            data.Data = models
+        }
+    } else {
+        data.Data = c.scan(scopesResult)
+    }
+
+    var totalRecords int64
+    delete(result.Statement.Clauses, "ORDER BY")
+    delete(result.Statement.Clauses, "LIMIT")
+    result.Count(&totalRecords)
+
+    page := cast.ToInt(c.ctx.Query("page"))
+    if page == 0 {
+        page = 1
+    }
+
+    pageSize := settings.ServerSettings.PageSize
+    if reqPageSize := c.ctx.Query("page_size"); reqPageSize != "" {
+        pageSize = cast.ToInt(reqPageSize)
+    }
+
+    data.Pagination = model.Pagination{
+        Total:       totalRecords,
+        PerPage:     pageSize,
+        CurrentPage: page,
+        TotalPages:  model.TotalPage(totalRecords, pageSize),
+    }
+    return data, true
 }
 
 func (c *Ctx[T]) PagingList() {