repo_db.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package repositories
  2. import (
  3. "fmt"
  4. "math"
  5. "strconv"
  6. "xorm.io/xorm"
  7. "xps/viewmodel"
  8. )
  9. type RepoDB struct {
  10. engine *xorm.Engine
  11. }
  12. func NewRepoDB(engine *xorm.Engine) *RepoDB {
  13. return &RepoDB{
  14. engine: engine,
  15. }
  16. }
  17. func (d *RepoDB) GetDataOfPage(tableCode string) (*viewmodel.PageResult, error) {
  18. limit := 100
  19. page := 1
  20. sqlStatement := ` SELECT A.* `
  21. sqlFrom := fmt.Sprintf(" FROM %s AS A ", tableCode)
  22. sqlWhere := ` WHERE 1 = 1 `
  23. sqlCount := ` SELECT COUNT(*) `
  24. res, err1 := d.engine.Query(sqlCount + sqlWhere)
  25. if err1 != nil {
  26. return nil, err1
  27. }
  28. total := int64(0)
  29. for _, v := range res[0] {
  30. total, _ = strconv.ParseInt(string(v), 10, 64)
  31. }
  32. pageStart := (page - 1) * limit
  33. sqlLimit := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
  34. results, err2 := d.engine.QueryInterface(sqlStatement + sqlFrom + sqlWhere + sqlLimit)
  35. if err2 != nil {
  36. return nil, err2
  37. }
  38. pageResult := &viewmodel.PageResult{}
  39. pageResult.Data = results
  40. pageResult.Total = total
  41. pageResult.PageSize = limit
  42. pageResult.Page = page
  43. pageResult.TotalPage= int64(math.Ceil(float64(total / int64(limit))))
  44. return pageResult, nil
  45. }
  46. func (d *RepoDB) GetDataOfList(tableCode string) ([]map[string]interface{}, error) {
  47. sqlStatement := fmt.Sprintf(" SELECT * FROM %s ", tableCode)
  48. sqlWhere := ` WHERE 1 = 1 `
  49. results, err := d.engine.QueryInterface(sqlStatement + sqlWhere)
  50. if err != nil {
  51. return nil, err
  52. }
  53. return results, nil
  54. }