514 lines
14 KiB
Go
514 lines
14 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
||
// versions:
|
||
// sqlc v1.30.0
|
||
// source: queries.sql
|
||
|
||
package sqlc
|
||
|
||
import (
|
||
"context"
|
||
"time"
|
||
|
||
"github.com/jackc/pgx/v5/pgtype"
|
||
)
|
||
|
||
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 getReviewByID = `-- name: GetReviewByID :one
|
||
|
||
|
||
|
||
SELECT id, data, rating, user_id, title_id, created_at
|
||
FROM reviews
|
||
WHERE review_id = $1::bigint
|
||
`
|
||
|
||
// 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) GetReviewByID(ctx context.Context, reviewID int64) (Review, error) {
|
||
row := q.db.QueryRow(ctx, getReviewByID, reviewID)
|
||
var i Review
|
||
err := row.Scan(
|
||
&i.ID,
|
||
&i.Data,
|
||
&i.Rating,
|
||
&i.UserID,
|
||
&i.TitleID,
|
||
&i.CreatedAt,
|
||
)
|
||
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 id, title_names, studio_id, poster_id, title_status, rating, rating_count, release_year, release_season, season, episodes_aired, episodes_all, episodes_len
|
||
FROM titles
|
||
WHERE id = $1::bigint
|
||
`
|
||
|
||
// -- 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;
|
||
func (q *Queries) GetTitleByID(ctx context.Context, titleID int64) (Title, error) {
|
||
row := q.db.QueryRow(ctx, getTitleByID, titleID)
|
||
var i Title
|
||
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,
|
||
)
|
||
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()
|
||
var 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
|
||
id, title_names, studio_id, poster_id, title_status, rating, rating_count, release_year, release_season, season, episodes_aired, episodes_all, episodes_len
|
||
FROM titles
|
||
WHERE
|
||
CASE
|
||
WHEN $1::text IS NOT NULL THEN
|
||
(
|
||
SELECT bool_and(
|
||
EXISTS (
|
||
SELECT 1
|
||
FROM jsonb_each_text(title_names) AS t(key, val)
|
||
WHERE val ILIKE pattern
|
||
)
|
||
)
|
||
FROM unnest(
|
||
ARRAY(
|
||
SELECT '%' || trim(w) || '%'
|
||
FROM unnest(string_to_array($1::text, ' ')) AS w
|
||
WHERE trim(w) <> ''
|
||
)
|
||
) AS pattern
|
||
)
|
||
ELSE true
|
||
END
|
||
|
||
AND ($2::title_status_t IS NULL OR title_status = $2::title_status_t)
|
||
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 = 'id' THEN id
|
||
WHEN $6::boolean AND $7::text = 'year' THEN release_year
|
||
WHEN $6::boolean AND $7::text = 'rating' THEN rating
|
||
-- WHEN sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::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 sqlc.arg(forward)::boolean AND sqlc.arg(sort_by)::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 {
|
||
Word *string `json:"word"`
|
||
Status *TitleStatusT `json:"status"`
|
||
Rating *float64 `json:"rating"`
|
||
ReleaseYear *int32 `json:"release_year"`
|
||
ReleaseSeason *ReleaseSeasonT `json:"release_season"`
|
||
Forward bool `json:"forward"`
|
||
SortBy string `json:"sort_by"`
|
||
Limit *int32 `json:"limit"`
|
||
}
|
||
|
||
func (q *Queries) SearchTitles(ctx context.Context, arg SearchTitlesParams) ([]Title, error) {
|
||
rows, err := q.db.Query(ctx, searchTitles,
|
||
arg.Word,
|
||
arg.Status,
|
||
arg.Rating,
|
||
arg.ReleaseYear,
|
||
arg.ReleaseSeason,
|
||
arg.Forward,
|
||
arg.SortBy,
|
||
arg.Limit,
|
||
)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
defer rows.Close()
|
||
var items []Title
|
||
for rows.Next() {
|
||
var i Title
|
||
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,
|
||
); 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
|
||
user_id, title_id, status, rate, review_id, ctime, id, title_names, studio_id, poster_id, title_status, rating, rating_count, release_year, release_season, season, episodes_aired, episodes_all, episodes_len
|
||
FROM usertitles as u
|
||
JOIN titles as t ON (u.title_id = t.id)
|
||
WHERE
|
||
CASE
|
||
WHEN $1::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($1::text, ' ')) AS w
|
||
WHERE trim(w) <> ''
|
||
)
|
||
) AS pattern
|
||
)
|
||
ELSE true
|
||
END
|
||
|
||
AND ($2::title_status_t IS NULL OR t.title_status = $2::title_status_t)
|
||
AND ($3::float IS NULL OR t.rating >= $3::float)
|
||
AND ($4::int IS NULL OR t.release_year = $4::int)
|
||
AND ($5::release_season_t IS NULL OR t.release_season = $5::release_season_t)
|
||
AND ($6::usertitle_status_t IS NULL OR u.usertitle_status = $6::usertitle_status_t)
|
||
|
||
LIMIT COALESCE($7::int, 100)
|
||
`
|
||
|
||
type SearchUserTitlesParams struct {
|
||
Word *string `json:"word"`
|
||
Status *TitleStatusT `json:"status"`
|
||
Rating *float64 `json:"rating"`
|
||
ReleaseYear *int32 `json:"release_year"`
|
||
ReleaseSeason *ReleaseSeasonT `json:"release_season"`
|
||
UsertitleStatus NullUsertitleStatusT `json:"usertitle_status"`
|
||
Limit *int32 `json:"limit"`
|
||
}
|
||
|
||
type SearchUserTitlesRow struct {
|
||
UserID int64 `json:"user_id"`
|
||
TitleID int64 `json:"title_id"`
|
||
Status UsertitleStatusT `json:"status"`
|
||
Rate *int32 `json:"rate"`
|
||
ReviewID *int64 `json:"review_id"`
|
||
Ctime pgtype.Timestamptz `json:"ctime"`
|
||
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"`
|
||
}
|
||
|
||
// 100 is default limit
|
||
// OFFSET sqlc.narg('offset')::int;
|
||
func (q *Queries) SearchUserTitles(ctx context.Context, arg SearchUserTitlesParams) ([]SearchUserTitlesRow, error) {
|
||
rows, err := q.db.Query(ctx, searchUserTitles,
|
||
arg.Word,
|
||
arg.Status,
|
||
arg.Rating,
|
||
arg.ReleaseYear,
|
||
arg.ReleaseSeason,
|
||
arg.UsertitleStatus,
|
||
arg.Limit,
|
||
)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
defer rows.Close()
|
||
var items []SearchUserTitlesRow
|
||
for rows.Next() {
|
||
var i SearchUserTitlesRow
|
||
if err := rows.Scan(
|
||
&i.UserID,
|
||
&i.TitleID,
|
||
&i.Status,
|
||
&i.Rate,
|
||
&i.ReviewID,
|
||
&i.Ctime,
|
||
&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,
|
||
); err != nil {
|
||
return nil, err
|
||
}
|
||
items = append(items, i)
|
||
}
|
||
if err := rows.Err(); err != nil {
|
||
return nil, err
|
||
}
|
||
return items, nil
|
||
}
|