685 lines
21 KiB
Go
685 lines
21 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.30.0
|
|
// source: queries.sql
|
|
|
|
package sqlc
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
const createImage = `-- name: CreateImage :one
|
|
INSERT INTO images (storage_type, image_path)
|
|
VALUES ($1, $2)
|
|
RETURNING id, storage_type, image_path
|
|
`
|
|
|
|
type CreateImageParams struct {
|
|
StorageType StorageTypeT `json:"storage_type"`
|
|
ImagePath string `json:"image_path"`
|
|
}
|
|
|
|
func (q *Queries) CreateImage(ctx context.Context, arg CreateImageParams) (Image, error) {
|
|
row := q.db.QueryRow(ctx, createImage, arg.StorageType, arg.ImagePath)
|
|
var i Image
|
|
err := row.Scan(&i.ID, &i.StorageType, &i.ImagePath)
|
|
return i, err
|
|
}
|
|
|
|
const getImageByID = `-- name: GetImageByID :one
|
|
SELECT id, storage_type, image_path
|
|
FROM images
|
|
WHERE id = $1::bigint
|
|
`
|
|
|
|
func (q *Queries) GetImageByID(ctx context.Context, illustID int64) (Image, error) {
|
|
row := q.db.QueryRow(ctx, getImageByID, illustID)
|
|
var i Image
|
|
err := row.Scan(&i.ID, &i.StorageType, &i.ImagePath)
|
|
return i, err
|
|
}
|
|
|
|
const getStudioByID = `-- name: GetStudioByID :one
|
|
SELECT id, studio_name, illust_id, studio_desc
|
|
FROM studios
|
|
WHERE id = $1::bigint
|
|
`
|
|
|
|
func (q *Queries) GetStudioByID(ctx context.Context, studioID int64) (Studio, error) {
|
|
row := q.db.QueryRow(ctx, getStudioByID, studioID)
|
|
var i Studio
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.StudioName,
|
|
&i.IllustID,
|
|
&i.StudioDesc,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const getTitleByID = `-- name: GetTitleByID :one
|
|
|
|
|
|
|
|
|
|
SELECT
|
|
t.id, t.title_names, t.studio_id, t.poster_id, t.title_status, t.rating, t.rating_count, t.release_year, t.release_season, t.season, t.episodes_aired, t.episodes_all, t.episodes_len,
|
|
i.storage_type::text as title_storage_type,
|
|
i.image_path as title_image_path,
|
|
jsonb_agg_strict(g.tag_name)'[]'::jsonb as tag_names,
|
|
s.studio_name as studio_name,
|
|
s.illust_id as studio_illust_id,
|
|
s.studio_desc as studio_desc,
|
|
si.storage_type::text as studio_storage_type,
|
|
si.image_path as studio_image_path
|
|
|
|
FROM titles as t
|
|
LEFT JOIN images as i ON (t.poster_id = i.id)
|
|
LEFT JOIN title_tags as tt ON (t.id = tt.title_id)
|
|
LEFT JOIN tags as g ON (tt.tag_id = g.id)
|
|
LEFT JOIN studios as s ON (t.studio_id = s.id)
|
|
LEFT JOIN images as si ON (s.illust_id = si.id)
|
|
|
|
WHERE id = $1::bigint
|
|
GROUP BY
|
|
t.id, i.id, s.id, si.id
|
|
`
|
|
|
|
type GetTitleByIDRow struct {
|
|
ID int64 `json:"id"`
|
|
TitleNames []byte `json:"title_names"`
|
|
StudioID int64 `json:"studio_id"`
|
|
PosterID *int64 `json:"poster_id"`
|
|
TitleStatus TitleStatusT `json:"title_status"`
|
|
Rating *float64 `json:"rating"`
|
|
RatingCount *int32 `json:"rating_count"`
|
|
ReleaseYear *int32 `json:"release_year"`
|
|
ReleaseSeason *ReleaseSeasonT `json:"release_season"`
|
|
Season *int32 `json:"season"`
|
|
EpisodesAired *int32 `json:"episodes_aired"`
|
|
EpisodesAll *int32 `json:"episodes_all"`
|
|
EpisodesLen []byte `json:"episodes_len"`
|
|
TitleStorageType string `json:"title_storage_type"`
|
|
TitleImagePath *string `json:"title_image_path"`
|
|
TagNames []byte `json:"tag_names"`
|
|
StudioName *string `json:"studio_name"`
|
|
StudioIllustID *int64 `json:"studio_illust_id"`
|
|
StudioDesc *string `json:"studio_desc"`
|
|
StudioStorageType string `json:"studio_storage_type"`
|
|
StudioImagePath *string `json:"studio_image_path"`
|
|
}
|
|
|
|
// -- name: ListUsers :many
|
|
// SELECT user_id, avatar_id, passhash, mail, nickname, disp_name, user_desc, creation_date
|
|
// FROM users
|
|
// ORDER BY user_id
|
|
// LIMIT $1 OFFSET $2;
|
|
// -- name: CreateUser :one
|
|
// INSERT INTO users (avatar_id, passhash, mail, nickname, disp_name, user_desc, creation_date)
|
|
// VALUES ($1, $2, $3, $4, $5, $6, $7)
|
|
// RETURNING user_id, avatar_id, nickname, disp_name, user_desc, creation_date;
|
|
// -- name: UpdateUser :one
|
|
// UPDATE users
|
|
// SET
|
|
//
|
|
// avatar_id = COALESCE(sqlc.narg('avatar_id'), avatar_id),
|
|
// disp_name = COALESCE(sqlc.narg('disp_name'), disp_name),
|
|
// user_desc = COALESCE(sqlc.narg('user_desc'), user_desc),
|
|
// passhash = COALESCE(sqlc.narg('passhash'), passhash)
|
|
//
|
|
// WHERE user_id = sqlc.arg('user_id')
|
|
// RETURNING user_id, avatar_id, nickname, disp_name, user_desc, creation_date;
|
|
// -- name: DeleteUser :exec
|
|
// DELETE FROM users
|
|
// WHERE user_id = $1;
|
|
// sqlc.struct: TitlesFull
|
|
func (q *Queries) GetTitleByID(ctx context.Context, titleID int64) (GetTitleByIDRow, error) {
|
|
row := q.db.QueryRow(ctx, getTitleByID, titleID)
|
|
var i GetTitleByIDRow
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.TitleNames,
|
|
&i.StudioID,
|
|
&i.PosterID,
|
|
&i.TitleStatus,
|
|
&i.Rating,
|
|
&i.RatingCount,
|
|
&i.ReleaseYear,
|
|
&i.ReleaseSeason,
|
|
&i.Season,
|
|
&i.EpisodesAired,
|
|
&i.EpisodesAll,
|
|
&i.EpisodesLen,
|
|
&i.TitleStorageType,
|
|
&i.TitleImagePath,
|
|
&i.TagNames,
|
|
&i.StudioName,
|
|
&i.StudioIllustID,
|
|
&i.StudioDesc,
|
|
&i.StudioStorageType,
|
|
&i.StudioImagePath,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const getTitleTags = `-- name: GetTitleTags :many
|
|
SELECT
|
|
tag_names
|
|
FROM tags as g
|
|
JOIN title_tags as t ON(t.tag_id = g.id)
|
|
WHERE t.title_id = $1::bigint
|
|
`
|
|
|
|
func (q *Queries) GetTitleTags(ctx context.Context, titleID int64) ([][]byte, error) {
|
|
rows, err := q.db.Query(ctx, getTitleTags, titleID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
items := [][]byte{}
|
|
for rows.Next() {
|
|
var tag_names []byte
|
|
if err := rows.Scan(&tag_names); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, tag_names)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const getUserByID = `-- name: GetUserByID :one
|
|
SELECT id, avatar_id, mail, nickname, disp_name, user_desc, creation_date
|
|
FROM users
|
|
WHERE id = $1
|
|
`
|
|
|
|
type GetUserByIDRow struct {
|
|
ID int64 `json:"id"`
|
|
AvatarID *int64 `json:"avatar_id"`
|
|
Mail *string `json:"mail"`
|
|
Nickname string `json:"nickname"`
|
|
DispName *string `json:"disp_name"`
|
|
UserDesc *string `json:"user_desc"`
|
|
CreationDate time.Time `json:"creation_date"`
|
|
}
|
|
|
|
func (q *Queries) GetUserByID(ctx context.Context, id int64) (GetUserByIDRow, error) {
|
|
row := q.db.QueryRow(ctx, getUserByID, id)
|
|
var i GetUserByIDRow
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.AvatarID,
|
|
&i.Mail,
|
|
&i.Nickname,
|
|
&i.DispName,
|
|
&i.UserDesc,
|
|
&i.CreationDate,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const insertStudio = `-- name: InsertStudio :one
|
|
INSERT INTO studios (studio_name, illust_id, studio_desc)
|
|
VALUES (
|
|
$1::text,
|
|
$2::bigint,
|
|
$3::text)
|
|
RETURNING id, studio_name, illust_id, studio_desc
|
|
`
|
|
|
|
type InsertStudioParams struct {
|
|
StudioName string `json:"studio_name"`
|
|
IllustID *int64 `json:"illust_id"`
|
|
StudioDesc *string `json:"studio_desc"`
|
|
}
|
|
|
|
func (q *Queries) InsertStudio(ctx context.Context, arg InsertStudioParams) (Studio, error) {
|
|
row := q.db.QueryRow(ctx, insertStudio, arg.StudioName, arg.IllustID, arg.StudioDesc)
|
|
var i Studio
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.StudioName,
|
|
&i.IllustID,
|
|
&i.StudioDesc,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const insertTag = `-- name: InsertTag :one
|
|
INSERT INTO tags (tag_names)
|
|
VALUES (
|
|
$1::jsonb)
|
|
RETURNING id, tag_names
|
|
`
|
|
|
|
func (q *Queries) InsertTag(ctx context.Context, tagNames []byte) (Tag, error) {
|
|
row := q.db.QueryRow(ctx, insertTag, tagNames)
|
|
var i Tag
|
|
err := row.Scan(&i.ID, &i.TagNames)
|
|
return i, err
|
|
}
|
|
|
|
const insertTitleTags = `-- name: InsertTitleTags :one
|
|
INSERT INTO title_tags (title_id, tag_id)
|
|
VALUES (
|
|
$1::bigint,
|
|
$2::bigint)
|
|
RETURNING title_id, tag_id
|
|
`
|
|
|
|
type InsertTitleTagsParams struct {
|
|
TitleID int64 `json:"title_id"`
|
|
TagID int64 `json:"tag_id"`
|
|
}
|
|
|
|
func (q *Queries) InsertTitleTags(ctx context.Context, arg InsertTitleTagsParams) (TitleTag, error) {
|
|
row := q.db.QueryRow(ctx, insertTitleTags, arg.TitleID, arg.TagID)
|
|
var i TitleTag
|
|
err := row.Scan(&i.TitleID, &i.TagID)
|
|
return i, err
|
|
}
|
|
|
|
const searchTitles = `-- name: SearchTitles :many
|
|
SELECT
|
|
t.id, t.title_names, t.studio_id, t.poster_id, t.title_status, t.rating, t.rating_count, t.release_year, t.release_season, t.season, t.episodes_aired, t.episodes_all, t.episodes_len,
|
|
i.storage_type::text as title_storage_type,
|
|
i.image_path as title_image_path,
|
|
jsonb_agg_strict(g.tag_name)'[]'::jsonb as tag_names,
|
|
s.studio_name as studio_name,
|
|
s.illust_id as studio_illust_id,
|
|
s.studio_desc as studio_desc,
|
|
si.storage_type::text as studio_storage_type,
|
|
si.image_path as studio_image_path
|
|
|
|
FROM titles as t
|
|
LEFT JOIN images as i ON (t.poster_id = i.id)
|
|
LEFT JOIN title_tags as tt ON (t.id = tt.title_id)
|
|
LEFT JOIN tags as g ON (tt.tag_id = g.id)
|
|
LEFT JOIN studios as s ON (t.studio_id = s.id)
|
|
LEFT JOIN images as si ON (s.illust_id = si.id)
|
|
|
|
WHERE
|
|
CASE
|
|
WHEN $1::boolean THEN
|
|
-- forward: greater than cursor (next page)
|
|
CASE $2::text
|
|
WHEN 'year' THEN
|
|
($3::int IS NULL) OR
|
|
(t.release_year > $3::int) OR
|
|
(t.release_year = $3::int AND t.id > $4::bigint)
|
|
|
|
WHEN 'rating' THEN
|
|
($5::float IS NULL) OR
|
|
(t.rating > $5::float) OR
|
|
(t.rating = $5::float AND t.id > $4::bigint)
|
|
|
|
WHEN 'id' THEN
|
|
($4::bigint IS NULL) OR
|
|
(t.id > $4::bigint)
|
|
|
|
ELSE true -- fallback
|
|
END
|
|
|
|
ELSE
|
|
-- backward: less than cursor (prev page)
|
|
CASE $2::text
|
|
WHEN 'year' THEN
|
|
($3::int IS NULL) OR
|
|
(t.release_year < $3::int) OR
|
|
(t.release_year = $3::int AND t.id < $4::bigint)
|
|
|
|
WHEN 'rating' THEN
|
|
($5::float IS NULL) OR
|
|
(t.rating < $5::float) OR
|
|
(t.rating = $5::float AND t.id < $4::bigint)
|
|
|
|
WHEN 'id' THEN
|
|
($4::bigint IS NULL) OR
|
|
(t.id < $4::bigint)
|
|
|
|
ELSE true
|
|
END
|
|
END
|
|
|
|
AND (
|
|
CASE
|
|
WHEN $6::text IS NOT NULL THEN
|
|
(
|
|
SELECT bool_and(
|
|
EXISTS (
|
|
SELECT 1
|
|
FROM jsonb_each_text(t.title_names) AS t(key, val)
|
|
WHERE val ILIKE pattern
|
|
)
|
|
)
|
|
FROM unnest(
|
|
ARRAY(
|
|
SELECT '%' || trim(w) || '%'
|
|
FROM unnest(string_to_array($6::text, ' ')) AS w
|
|
WHERE trim(w) <> ''
|
|
)
|
|
) AS pattern
|
|
)
|
|
ELSE true
|
|
END
|
|
)
|
|
|
|
AND (t.title_status::text IN ($7::text, $8::text, $9::text))
|
|
AND ($10::float IS NULL OR t.rating >= $10::float)
|
|
AND ($11::int IS NULL OR t.release_year = $11::int)
|
|
AND ($12::release_season_t IS NULL OR t.release_season = $12::release_season_t)
|
|
|
|
GROUP BY
|
|
t.id, i.id, s.id, si.id
|
|
|
|
ORDER BY
|
|
CASE WHEN $1::boolean THEN
|
|
CASE
|
|
WHEN $2::text = 'id' THEN t.id
|
|
WHEN $2::text = 'year' THEN t.release_year
|
|
WHEN $2::text = 'rating' THEN t.rating
|
|
END
|
|
END ASC,
|
|
CASE WHEN NOT $1::boolean THEN
|
|
CASE
|
|
WHEN $2::text = 'id' THEN t.id
|
|
WHEN $2::text = 'year' THEN t.release_year
|
|
WHEN $2::text = 'rating' THEN t.rating
|
|
END
|
|
END DESC,
|
|
|
|
CASE WHEN $2::text <> 'id' THEN t.id END ASC
|
|
|
|
LIMIT COALESCE($13::int, 100)
|
|
`
|
|
|
|
type SearchTitlesParams struct {
|
|
Forward bool `json:"forward"`
|
|
SortBy string `json:"sort_by"`
|
|
CursorYear *int32 `json:"cursor_year"`
|
|
CursorID *int64 `json:"cursor_id"`
|
|
CursorRating *float64 `json:"cursor_rating"`
|
|
Word *string `json:"word"`
|
|
Ongoing string `json:"ongoing"`
|
|
Finished string `json:"finished"`
|
|
Planned string `json:"planned"`
|
|
Rating *float64 `json:"rating"`
|
|
ReleaseYear *int32 `json:"release_year"`
|
|
ReleaseSeason *ReleaseSeasonT `json:"release_season"`
|
|
Limit *int32 `json:"limit"`
|
|
}
|
|
|
|
type SearchTitlesRow struct {
|
|
ID int64 `json:"id"`
|
|
TitleNames []byte `json:"title_names"`
|
|
StudioID int64 `json:"studio_id"`
|
|
PosterID *int64 `json:"poster_id"`
|
|
TitleStatus TitleStatusT `json:"title_status"`
|
|
Rating *float64 `json:"rating"`
|
|
RatingCount *int32 `json:"rating_count"`
|
|
ReleaseYear *int32 `json:"release_year"`
|
|
ReleaseSeason *ReleaseSeasonT `json:"release_season"`
|
|
Season *int32 `json:"season"`
|
|
EpisodesAired *int32 `json:"episodes_aired"`
|
|
EpisodesAll *int32 `json:"episodes_all"`
|
|
EpisodesLen []byte `json:"episodes_len"`
|
|
TitleStorageType string `json:"title_storage_type"`
|
|
TitleImagePath *string `json:"title_image_path"`
|
|
TagNames []byte `json:"tag_names"`
|
|
StudioName *string `json:"studio_name"`
|
|
StudioIllustID *int64 `json:"studio_illust_id"`
|
|
StudioDesc *string `json:"studio_desc"`
|
|
StudioStorageType string `json:"studio_storage_type"`
|
|
StudioImagePath *string `json:"studio_image_path"`
|
|
}
|
|
|
|
func (q *Queries) SearchTitles(ctx context.Context, arg SearchTitlesParams) ([]SearchTitlesRow, error) {
|
|
rows, err := q.db.Query(ctx, searchTitles,
|
|
arg.Forward,
|
|
arg.SortBy,
|
|
arg.CursorYear,
|
|
arg.CursorID,
|
|
arg.CursorRating,
|
|
arg.Word,
|
|
arg.Ongoing,
|
|
arg.Finished,
|
|
arg.Planned,
|
|
arg.Rating,
|
|
arg.ReleaseYear,
|
|
arg.ReleaseSeason,
|
|
arg.Limit,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
items := []SearchTitlesRow{}
|
|
for rows.Next() {
|
|
var i SearchTitlesRow
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.TitleNames,
|
|
&i.StudioID,
|
|
&i.PosterID,
|
|
&i.TitleStatus,
|
|
&i.Rating,
|
|
&i.RatingCount,
|
|
&i.ReleaseYear,
|
|
&i.ReleaseSeason,
|
|
&i.Season,
|
|
&i.EpisodesAired,
|
|
&i.EpisodesAll,
|
|
&i.EpisodesLen,
|
|
&i.TitleStorageType,
|
|
&i.TitleImagePath,
|
|
&i.TagNames,
|
|
&i.StudioName,
|
|
&i.StudioIllustID,
|
|
&i.StudioDesc,
|
|
&i.StudioStorageType,
|
|
&i.StudioImagePath,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, i)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const searchUserTitles = `-- name: SearchUserTitles :many
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SELECT id, data, rating, user_id, title_id, created_at
|
|
FROM reviews
|
|
WHERE review_id = $1::bigint
|
|
`
|
|
|
|
// 100 is default limit
|
|
// SELECT
|
|
//
|
|
// t.*,
|
|
// u.user_id as user_id,
|
|
// u.status as usertitle_status,
|
|
// u.rate as user_rate,
|
|
// u.review_id as review_id,
|
|
// u.ctime as user_ctime,
|
|
// i.storage_type::text as title_storage_type,
|
|
// i.image_path as title_image_path,
|
|
// jsonb_agg_strict(g.tag_name)'[]'::jsonb as tag_names,
|
|
// s.studio_name as studio_name,
|
|
// s.illust_id as studio_illust_id,
|
|
// s.studio_desc as studio_desc,
|
|
// si.storage_type::text as studio_storage_type,
|
|
// si.image_path as studio_image_path
|
|
//
|
|
// FROM usertitles as u
|
|
// LEFT JOIN titles as t ON (u.title_id = t.id)
|
|
// LEFT JOIN images as i ON (t.poster_id = i.id)
|
|
// LEFT JOIN title_tags as tt ON (t.id = tt.title_id)
|
|
// LEFT JOIN tags as g ON (tt.tag_id = g.id)
|
|
// LEFT JOIN studios as s ON (t.studio_id = s.id)
|
|
// LEFT JOIN images as si ON (s.illust_id = si.id)
|
|
// WHERE
|
|
//
|
|
// CASE
|
|
// WHEN sqlc.arg('forward')::boolean THEN
|
|
// -- forward: greater than cursor (next page)
|
|
// CASE sqlc.arg('sort_by')::text
|
|
// WHEN 'year' THEN
|
|
// (sqlc.narg('cursor_year')::int IS NULL) OR
|
|
// (t.release_year > sqlc.narg('cursor_year')::int) OR
|
|
// (t.release_year = sqlc.narg('cursor_year')::int AND t.id > sqlc.narg('cursor_id')::bigint)
|
|
// WHEN 'rating' THEN
|
|
// (sqlc.narg('cursor_rating')::float IS NULL) OR
|
|
// (t.rating > sqlc.narg('cursor_rating')::float) OR
|
|
// (t.rating = sqlc.narg('cursor_rating')::float AND t.id > sqlc.narg('cursor_id')::bigint)
|
|
// WHEN 'id' THEN
|
|
// (sqlc.narg('cursor_id')::bigint IS NULL) OR
|
|
// (t.id > sqlc.narg('cursor_id')::bigint)
|
|
// ELSE true -- fallback
|
|
// END
|
|
// ELSE
|
|
// -- backward: less than cursor (prev page)
|
|
// CASE sqlc.arg('sort_by')::text
|
|
// WHEN 'year' THEN
|
|
// (sqlc.narg('cursor_year')::int IS NULL) OR
|
|
// (t.release_year < sqlc.narg('cursor_year')::int) OR
|
|
// (t.release_year = sqlc.narg('cursor_year')::int AND t.id < sqlc.narg('cursor_id')::bigint)
|
|
// WHEN 'rating' THEN
|
|
// (sqlc.narg('cursor_rating')::float IS NULL) OR
|
|
// (t.rating < sqlc.narg('cursor_rating')::float) OR
|
|
// (t.rating = sqlc.narg('cursor_rating')::float AND t.id < sqlc.narg('cursor_id')::bigint)
|
|
// WHEN 'id' THEN
|
|
// (sqlc.narg('cursor_id')::bigint IS NULL) OR
|
|
// (t.id < sqlc.narg('cursor_id')::bigint)
|
|
// ELSE true
|
|
// END
|
|
// END
|
|
// AND (
|
|
// CASE
|
|
// WHEN sqlc.narg('word')::text IS NOT NULL THEN
|
|
// (
|
|
// SELECT bool_and(
|
|
// EXISTS (
|
|
// SELECT 1
|
|
// FROM jsonb_each_text(t.title_names) AS t(key, val)
|
|
// WHERE val ILIKE pattern
|
|
// )
|
|
// )
|
|
// FROM unnest(
|
|
// ARRAY(
|
|
// SELECT '%' || trim(w) || '%'
|
|
// FROM unnest(string_to_array(sqlc.narg('word')::text, ' ')) AS w
|
|
// WHERE trim(w) <> ''
|
|
// )
|
|
// ) AS pattern
|
|
// )
|
|
// ELSE true
|
|
// END
|
|
// )
|
|
// AND (u.::text IN (sqlc.arg('ongoing')::text, sqlc.arg('finished')::text, sqlc.arg('planned')::text))
|
|
// AND (t.title_status::text IN (sqlc.arg('ongoing')::text, sqlc.arg('finished')::text, sqlc.arg('planned')::text))
|
|
// AND (sqlc.narg('rating')::float IS NULL OR t.rating >= sqlc.narg('rating')::float)
|
|
// AND (sqlc.narg('release_year')::int IS NULL OR t.release_year = sqlc.narg('release_year')::int)
|
|
// AND (sqlc.narg('release_season')::release_season_t IS NULL OR t.release_season = sqlc.narg('release_season')::release_season_t)
|
|
//
|
|
// GROUP BY
|
|
//
|
|
// t.id, i.id, s.id, si.id
|
|
//
|
|
// ORDER BY
|
|
//
|
|
// CASE WHEN sqlc.arg('forward')::boolean THEN
|
|
// CASE
|
|
// WHEN sqlc.arg('sort_by')::text = 'id' THEN t.id
|
|
// WHEN sqlc.arg('sort_by')::text = 'year' THEN t.release_year
|
|
// WHEN sqlc.arg('sort_by')::text = 'rating' THEN t.rating
|
|
// END
|
|
// END ASC,
|
|
// CASE WHEN NOT sqlc.arg('forward')::boolean THEN
|
|
// CASE
|
|
// WHEN sqlc.arg('sort_by')::text = 'id' THEN t.id
|
|
// WHEN sqlc.arg('sort_by')::text = 'year' THEN t.release_year
|
|
// WHEN sqlc.arg('sort_by')::text = 'rating' THEN t.rating
|
|
// END
|
|
// END DESC,
|
|
// CASE WHEN sqlc.arg('sort_by')::text <> 'id' THEN t.id END ASC
|
|
//
|
|
// LIMIT COALESCE(sqlc.narg('limit')::int, 100); -- 100 is default limit
|
|
// -- name: ListTitles :many
|
|
// SELECT title_id, title_names, studio_id, poster_id, signal_ids,
|
|
//
|
|
// title_status, rating, rating_count, release_year, release_season,
|
|
// season, episodes_aired, episodes_all, episodes_len
|
|
//
|
|
// FROM titles
|
|
// ORDER BY title_id
|
|
// LIMIT $1 OFFSET $2;
|
|
// -- name: UpdateTitle :one
|
|
// UPDATE titles
|
|
// SET
|
|
//
|
|
// title_names = COALESCE(sqlc.narg('title_names'), title_names),
|
|
// studio_id = COALESCE(sqlc.narg('studio_id'), studio_id),
|
|
// poster_id = COALESCE(sqlc.narg('poster_id'), poster_id),
|
|
// signal_ids = COALESCE(sqlc.narg('signal_ids'), signal_ids),
|
|
// title_status = COALESCE(sqlc.narg('title_status'), title_status),
|
|
// release_year = COALESCE(sqlc.narg('release_year'), release_year),
|
|
// release_season = COALESCE(sqlc.narg('release_season'), release_season),
|
|
// episodes_aired = COALESCE(sqlc.narg('episodes_aired'), episodes_aired),
|
|
// episodes_all = COALESCE(sqlc.narg('episodes_all'), episodes_all),
|
|
// episodes_len = COALESCE(sqlc.narg('episodes_len'), episodes_len)
|
|
//
|
|
// WHERE title_id = sqlc.arg('title_id')
|
|
// RETURNING *;
|
|
func (q *Queries) SearchUserTitles(ctx context.Context, reviewID int64) ([]Review, error) {
|
|
rows, err := q.db.Query(ctx, searchUserTitles, reviewID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
items := []Review{}
|
|
for rows.Next() {
|
|
var i Review
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.Data,
|
|
&i.Rating,
|
|
&i.UserID,
|
|
&i.TitleID,
|
|
&i.CreatedAt,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, i)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|