feat: add sort and order params to admin market list
Supports sorting by name, city, date, created, status with asc/desc order.
This commit is contained in:
@@ -153,6 +153,8 @@ func ToDetail(m Market) MarketDetail {
|
||||
type AdminSearchParams struct {
|
||||
Status string `form:"status"`
|
||||
Query string `form:"q"`
|
||||
Sort string `form:"sort"` // name, city, date, created, status
|
||||
Order string `form:"order"` // asc, desc
|
||||
Page int `form:"page"`
|
||||
PerPage int `form:"per_page"`
|
||||
}
|
||||
|
||||
@@ -474,13 +474,31 @@ func (r *pgRepository) AdminSearch(ctx context.Context, params AdminSearchParams
|
||||
offsetArg := nextArg()
|
||||
args = append(args, params.PerPage, params.Offset())
|
||||
|
||||
orderCol := "m.created_at"
|
||||
switch params.Sort {
|
||||
case "name":
|
||||
orderCol = "m.name"
|
||||
case "city":
|
||||
orderCol = "m.city"
|
||||
case "date":
|
||||
orderCol = "m.start_date"
|
||||
case "created":
|
||||
orderCol = "m.created_at"
|
||||
case "status":
|
||||
orderCol = "m.status"
|
||||
}
|
||||
orderDir := "DESC"
|
||||
if params.Order == "asc" {
|
||||
orderDir = "ASC"
|
||||
}
|
||||
|
||||
dataQuery := fmt.Sprintf(`
|
||||
SELECT %s
|
||||
FROM markets m
|
||||
%s
|
||||
ORDER BY m.created_at DESC
|
||||
ORDER BY %s %s
|
||||
LIMIT %s OFFSET %s
|
||||
`, selectFullColumns, where, limitArg, offsetArg)
|
||||
`, selectFullColumns, where, orderCol, orderDir, limitArg, offsetArg)
|
||||
|
||||
rows, err := r.db.Query(ctx, dataQuery, args...)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user