From e2ac80610cb0a0de71d7775dd97571c67fdd0f08 Mon Sep 17 00:00:00 2001 From: Iron_Felix Date: Wed, 19 Nov 2025 04:11:31 +0300 Subject: [PATCH] fix: now gettitles must work --- modules/backend/handlers/titles.go | 2 ++ modules/backend/queries.sql | 2 -- sql/queries.sql.go | 41 ++++++++++++++++++------------ 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/modules/backend/handlers/titles.go b/modules/backend/handlers/titles.go index e8a3bff..f187cc4 100644 --- a/modules/backend/handlers/titles.go +++ b/modules/backend/handlers/titles.go @@ -240,6 +240,8 @@ func (s Server) GetTitles(ctx context.Context, request oapi.GetTitlesRequestObje Rating: request.Params.Rating, ReleaseYear: request.Params.ReleaseYear, ReleaseSeason: season, + Forward: true, + SortBy: "id", Limit: request.Params.Limit, }) if err != nil { diff --git a/modules/backend/queries.sql b/modules/backend/queries.sql index 8962895..9da104f 100644 --- a/modules/backend/queries.sql +++ b/modules/backend/queries.sql @@ -111,14 +111,12 @@ ORDER BY -- Основной ключ: выбранное поле CASE WHEN sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'id' THEN id - WHEN sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'name' THEN name WHEN sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'year' THEN release_year WHEN sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'rating' THEN rating WHEN sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'views' THEN views END ASC, CASE WHEN NOT sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'id' THEN id - WHEN NOT sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'name' THEN name WHEN NOT sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'year' THEN release_year WHEN NOT sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'rating' THEN rating WHEN NOT sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'views' THEN views diff --git a/sql/queries.sql.go b/sql/queries.sql.go index 4e28f40..14a3f8c 100644 --- a/sql/queries.sql.go +++ b/sql/queries.sql.go @@ -315,18 +315,29 @@ WHERE AND ($3::float IS NULL OR rating >= $3::float) AND ($4::int IS NULL OR release_year = $4::int) AND ($5::release_season_t IS NULL OR release_season = $5::release_season_t) -ORDER BY CASE - WHEN $6::boolean AND $7::text = 'name' THEN name - WHEN $8::boolean AND $7::text = 'id' THEN id - WHEN $8::boolean AND $7::text = 'name' THEN name - WHEN $8::boolean AND $7::text = 'id' THEN id -END ASC, CASE - WHEN NOT $8::boolean AND $7::text = 'name' THEN name - WHEN NOT $8::boolean AND $7::text = 'id' THEN id - WHEN NOT $8::boolean AND $7::text = 'name' THEN name - WHEN NOT $8::boolean AND $7::text = 'id' THEN id -END DESC -LIMIT COALESCE($9::int, 100) +ORDER BY + -- Основной ключ: выбранное поле + CASE + WHEN $6::boolean AND $7::text = 'id' THEN id + WHEN $6::boolean AND $7::text = 'year' THEN release_year + WHEN $6::boolean AND $7::text = 'rating' THEN rating + WHEN $6::boolean AND $7::text = 'views' THEN views + END ASC, + CASE + WHEN NOT $6::boolean AND $7::text = 'id' THEN id + WHEN NOT $6::boolean AND $7::text = 'year' THEN release_year + WHEN NOT $6::boolean AND $7::text = 'rating' THEN rating + WHEN NOT $6::boolean AND $7::text = 'views' THEN views + END DESC, + + -- Вторичный ключ: id — только если НЕ сортируем по id + CASE + WHEN $7::text != 'id' AND $6::boolean THEN id + END ASC, + CASE + WHEN $7::text != 'id' AND NOT $6::boolean THEN id + END DESC +LIMIT COALESCE($8::int, 100) ` type SearchTitlesParams struct { @@ -336,8 +347,7 @@ type SearchTitlesParams struct { ReleaseYear *int32 `json:"release_year"` ReleaseSeason *ReleaseSeasonT `json:"release_season"` Forward bool `json:"forward"` - OrderBy string `json:"order_by"` - Reverse bool `json:"reverse"` + SortBy string `json:"sort_by"` Limit *int32 `json:"limit"` } @@ -349,8 +359,7 @@ func (q *Queries) SearchTitles(ctx context.Context, arg SearchTitlesParams) ([]T arg.ReleaseYear, arg.ReleaseSeason, arg.Forward, - arg.OrderBy, - arg.Reverse, + arg.SortBy, arg.Limit, ) if err != nil {