package repository import ( "fmt" "strconv" "xorm.io/xorm" "xps/pkg/common" ) type RepoDB struct { engine *xorm.Engine } func NewRepoDB(engine *xorm.Engine) *RepoDB { return &RepoDB{ engine: engine, } } func (d *RepoDB) GetDataOfPage(tableCode string) (*common.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) datalist, err2 := d.engine.QueryInterface(sqlStatement + sqlFrom + sqlWhere + sqlLimit) if err2 != nil { return nil, err2 } pageResult := &common.PageResult{ Total: total, PageSize: limit, Page: page, Data: datalist, } return pageResult, nil } func (d *RepoDB) GetDataOfList(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 }