package repositories import ( "fmt" "math" "strconv" "xorm.io/xorm" "xps/viewmodels" ) type DbRepo struct { engine *xorm.Engine } func NewDbRepo(engine *xorm.Engine) *DbRepo { return &DbRepo{ engine: engine, } } func (d *DbRepo) GetPage(tableCode string) (*viewmodels.PageResult, error) { limit := 100 page := 1 sqlStatement := ` SELECT A.* ` sqlFrom := fmt.Sprintf(" FROM %s AS A ", tableCode) sqlWhere := ` WHERE 1 = 1 ` sqlCount := ` SELECT COUNT(*) ` res, err1 := d.engine.Query(sqlCount + sqlWhere) if err1 != nil { return nil, err1 } total := int64(0) for _, v := range res[0] { total, _ = strconv.ParseInt(string(v), 10, 64) } pageStart := (page - 1) * limit sqlLimit := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart) results, err2 := d.engine.QueryInterface(sqlStatement + sqlFrom + sqlWhere + sqlLimit) if err2 != nil { return nil, err2 } pageResult := &viewmodels.PageResult{} pageResult.Data = results pageResult.Total = total pageResult.PageSize = limit pageResult.Page = page pageResult.TotalPage= int64(math.Ceil(float64(total / int64(limit)))) return pageResult, nil } func (d *DbRepo) GetList(tableCode string) ([]map[string]interface{}, error) { sqlStatement := fmt.Sprintf(" SELECT * FROM %s ", tableCode) sqlWhere := ` WHERE 1 = 1 ` results, err := d.engine.QueryInterface(sqlStatement + sqlWhere) if err != nil { return nil, err } return results, nil }