sort.go 976 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package cosy
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "gorm.io/gorm"
  6. )
  7. func (c *Ctx[T]) SortOrder() func(db *gorm.DB) *gorm.DB {
  8. return func(db *gorm.DB) *gorm.DB {
  9. sort := c.ctx.DefaultQuery("order", "desc")
  10. order := fmt.Sprintf("%s %s", DefaultQuery(c.ctx, "sort_by", c.itemKey), sort)
  11. return db.Order(order)
  12. }
  13. }
  14. func (c *Ctx[T]) OrderAndPaginate() func(db *gorm.DB) *gorm.DB {
  15. return func(db *gorm.DB) *gorm.DB {
  16. sort := c.ctx.DefaultQuery("order", "desc")
  17. order := fmt.Sprintf("%s %s", DefaultQuery(c.ctx, "sort_by", c.itemKey), sort)
  18. db = db.Order(order)
  19. _, offset, pageSize := GetPagingParams(c.ctx)
  20. return db.Offset(offset).Limit(pageSize)
  21. }
  22. }
  23. func DefaultValue(c *gin.Context, key string, defaultValue any) any {
  24. if value, ok := c.Get(key); ok {
  25. return value
  26. }
  27. return defaultValue
  28. }
  29. func DefaultQuery(c *gin.Context, key string, defaultValue any) string {
  30. return c.DefaultQuery(key, DefaultValue(c, key, defaultValue).(string))
  31. }