enhance(cosy): pagination list

This commit is contained in:
0xJacky 2024-01-15 00:08:27 +08:00
parent 79d0d37526
commit 526fedd04a
No known key found for this signature in database
GPG key ID: B6E4A6E4A561BAF0

View file

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