common.go 800 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package service
  2. import "gorm.io/gorm"
  3. func checkPageParam(page, pageSize int) (int, int) {
  4. retPage := 0
  5. retPageSize := 0
  6. if page <= 0 {
  7. retPage = 1
  8. } else {
  9. retPage = page
  10. }
  11. if pageSize <= 0 {
  12. retPageSize = 20
  13. } else if pageSize > 100 {
  14. retPageSize = 100
  15. } else {
  16. retPageSize = pageSize
  17. }
  18. return retPage, retPageSize
  19. }
  20. type PaginationResult struct {
  21. Count int64
  22. Limit func(db *gorm.DB) *gorm.DB
  23. }
  24. func Paginate(db *gorm.DB, page int, size int) *PaginationResult {
  25. var count int64
  26. db.Count(&count)
  27. limit := func(db *gorm.DB) *gorm.DB {
  28. if page <= 0 {
  29. page = 1
  30. }
  31. switch {
  32. case size > 100:
  33. size = 100
  34. case size <= 0:
  35. size = 10
  36. }
  37. return db.Offset((page - 1) * size).Limit(size)
  38. }
  39. return &PaginationResult{
  40. Count: count,
  41. Limit: limit,
  42. }
  43. }