From 10da87735fcdebf256f9ff417c309fdddb4f2fda Mon Sep 17 00:00:00 2001 From: vikingowl Date: Thu, 5 Mar 2026 15:22:01 +0100 Subject: [PATCH] feat: add sort and order params to admin market list Supports sorting by name, city, date, created, status with asc/desc order. --- backend/internal/domain/market/dto.go | 2 ++ backend/internal/domain/market/repository.go | 22 ++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/backend/internal/domain/market/dto.go b/backend/internal/domain/market/dto.go index 53caf9b..a4cbb97 100644 --- a/backend/internal/domain/market/dto.go +++ b/backend/internal/domain/market/dto.go @@ -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"` } diff --git a/backend/internal/domain/market/repository.go b/backend/internal/domain/market/repository.go index e063271..f1e1091 100644 --- a/backend/internal/domain/market/repository.go +++ b/backend/internal/domain/market/repository.go @@ -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 {