fix: now gettitles must work
Some checks failed
Build and Deploy Go App / build (push) Has been cancelled
Build and Deploy Go App / deploy (push) Has been cancelled

This commit is contained in:
Iron_Felix 2025-11-19 04:11:31 +03:00
parent 7e6520c931
commit e2ac80610c
3 changed files with 27 additions and 18 deletions

View file

@ -240,6 +240,8 @@ func (s Server) GetTitles(ctx context.Context, request oapi.GetTitlesRequestObje
Rating: request.Params.Rating, Rating: request.Params.Rating,
ReleaseYear: request.Params.ReleaseYear, ReleaseYear: request.Params.ReleaseYear,
ReleaseSeason: season, ReleaseSeason: season,
Forward: true,
SortBy: "id",
Limit: request.Params.Limit, Limit: request.Params.Limit,
}) })
if err != nil { if err != nil {

View file

@ -111,14 +111,12 @@ ORDER BY
-- Основной ключ: выбранное поле -- Основной ключ: выбранное поле
CASE 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 = '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 = '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 = 'rating' THEN rating
WHEN sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'views' THEN views WHEN sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'views' THEN views
END ASC, END ASC,
CASE 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 = '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 = '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 = 'rating' THEN rating
WHEN NOT sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'views' THEN views WHEN NOT sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::text = 'views' THEN views

View file

@ -315,18 +315,29 @@ WHERE
AND ($3::float IS NULL OR rating >= $3::float) AND ($3::float IS NULL OR rating >= $3::float)
AND ($4::int IS NULL OR release_year = $4::int) AND ($4::int IS NULL OR release_year = $4::int)
AND ($5::release_season_t IS NULL OR release_season = $5::release_season_t) AND ($5::release_season_t IS NULL OR release_season = $5::release_season_t)
ORDER BY CASE ORDER BY
WHEN $6::boolean AND $7::text = 'name' THEN name -- Основной ключ: выбранное поле
WHEN $8::boolean AND $7::text = 'id' THEN id CASE
WHEN $8::boolean AND $7::text = 'name' THEN name WHEN $6::boolean AND $7::text = 'id' THEN id
WHEN $8::boolean AND $7::text = 'id' THEN id WHEN $6::boolean AND $7::text = 'year' THEN release_year
END ASC, CASE WHEN $6::boolean AND $7::text = 'rating' THEN rating
WHEN NOT $8::boolean AND $7::text = 'name' THEN name WHEN $6::boolean AND $7::text = 'views' THEN views
WHEN NOT $8::boolean AND $7::text = 'id' THEN id END ASC,
WHEN NOT $8::boolean AND $7::text = 'name' THEN name CASE
WHEN NOT $8::boolean AND $7::text = 'id' THEN id WHEN NOT $6::boolean AND $7::text = 'id' THEN id
END DESC WHEN NOT $6::boolean AND $7::text = 'year' THEN release_year
LIMIT COALESCE($9::int, 100) 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 { type SearchTitlesParams struct {
@ -336,8 +347,7 @@ type SearchTitlesParams struct {
ReleaseYear *int32 `json:"release_year"` ReleaseYear *int32 `json:"release_year"`
ReleaseSeason *ReleaseSeasonT `json:"release_season"` ReleaseSeason *ReleaseSeasonT `json:"release_season"`
Forward bool `json:"forward"` Forward bool `json:"forward"`
OrderBy string `json:"order_by"` SortBy string `json:"sort_by"`
Reverse bool `json:"reverse"`
Limit *int32 `json:"limit"` Limit *int32 `json:"limit"`
} }
@ -349,8 +359,7 @@ func (q *Queries) SearchTitles(ctx context.Context, arg SearchTitlesParams) ([]T
arg.ReleaseYear, arg.ReleaseYear,
arg.ReleaseSeason, arg.ReleaseSeason,
arg.Forward, arg.Forward,
arg.OrderBy, arg.SortBy,
arg.Reverse,
arg.Limit, arg.Limit,
) )
if err != nil { if err != nil {