diff --git a/modules/backend/db/db.go b/modules/backend/db/db.go new file mode 100644 index 0000000..9d485b5 --- /dev/null +++ b/modules/backend/db/db.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package db + +import ( + "context" + + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgconn" +) + +type DBTX interface { + Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error) + Query(context.Context, string, ...interface{}) (pgx.Rows, error) + QueryRow(context.Context, string, ...interface{}) pgx.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx pgx.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/modules/backend/db/models.go b/modules/backend/db/models.go new file mode 100644 index 0000000..ba76782 --- /dev/null +++ b/modules/backend/db/models.go @@ -0,0 +1,266 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package db + +import ( + "database/sql/driver" + "fmt" + + "github.com/jackc/pgx/v5/pgtype" +) + +type ReleaseSeasonT string + +const ( + ReleaseSeasonTWinter ReleaseSeasonT = "winter" + ReleaseSeasonTSpring ReleaseSeasonT = "spring" + ReleaseSeasonTSummer ReleaseSeasonT = "summer" + ReleaseSeasonTFall ReleaseSeasonT = "fall" +) + +func (e *ReleaseSeasonT) Scan(src interface{}) error { + switch s := src.(type) { + case []byte: + *e = ReleaseSeasonT(s) + case string: + *e = ReleaseSeasonT(s) + default: + return fmt.Errorf("unsupported scan type for ReleaseSeasonT: %T", src) + } + return nil +} + +type NullReleaseSeasonT struct { + ReleaseSeasonT ReleaseSeasonT `json:"release_season_t"` + Valid bool `json:"valid"` // Valid is true if ReleaseSeasonT is not NULL +} + +// Scan implements the Scanner interface. +func (ns *NullReleaseSeasonT) Scan(value interface{}) error { + if value == nil { + ns.ReleaseSeasonT, ns.Valid = "", false + return nil + } + ns.Valid = true + return ns.ReleaseSeasonT.Scan(value) +} + +// Value implements the driver Valuer interface. +func (ns NullReleaseSeasonT) Value() (driver.Value, error) { + if !ns.Valid { + return nil, nil + } + return string(ns.ReleaseSeasonT), nil +} + +type StorageTypeT string + +const ( + StorageTypeTLocal StorageTypeT = "local" + StorageTypeTS3 StorageTypeT = "s3" +) + +func (e *StorageTypeT) Scan(src interface{}) error { + switch s := src.(type) { + case []byte: + *e = StorageTypeT(s) + case string: + *e = StorageTypeT(s) + default: + return fmt.Errorf("unsupported scan type for StorageTypeT: %T", src) + } + return nil +} + +type NullStorageTypeT struct { + StorageTypeT StorageTypeT `json:"storage_type_t"` + Valid bool `json:"valid"` // Valid is true if StorageTypeT is not NULL +} + +// Scan implements the Scanner interface. +func (ns *NullStorageTypeT) Scan(value interface{}) error { + if value == nil { + ns.StorageTypeT, ns.Valid = "", false + return nil + } + ns.Valid = true + return ns.StorageTypeT.Scan(value) +} + +// Value implements the driver Valuer interface. +func (ns NullStorageTypeT) Value() (driver.Value, error) { + if !ns.Valid { + return nil, nil + } + return string(ns.StorageTypeT), nil +} + +type TitleStatusT string + +const ( + TitleStatusTFinished TitleStatusT = "finished" + TitleStatusTOngoing TitleStatusT = "ongoing" + TitleStatusTPlanned TitleStatusT = "planned" +) + +func (e *TitleStatusT) Scan(src interface{}) error { + switch s := src.(type) { + case []byte: + *e = TitleStatusT(s) + case string: + *e = TitleStatusT(s) + default: + return fmt.Errorf("unsupported scan type for TitleStatusT: %T", src) + } + return nil +} + +type NullTitleStatusT struct { + TitleStatusT TitleStatusT `json:"title_status_t"` + Valid bool `json:"valid"` // Valid is true if TitleStatusT is not NULL +} + +// Scan implements the Scanner interface. +func (ns *NullTitleStatusT) Scan(value interface{}) error { + if value == nil { + ns.TitleStatusT, ns.Valid = "", false + return nil + } + ns.Valid = true + return ns.TitleStatusT.Scan(value) +} + +// Value implements the driver Valuer interface. +func (ns NullTitleStatusT) Value() (driver.Value, error) { + if !ns.Valid { + return nil, nil + } + return string(ns.TitleStatusT), nil +} + +type UsertitleStatusT string + +const ( + UsertitleStatusTFinished UsertitleStatusT = "finished" + UsertitleStatusTPlanned UsertitleStatusT = "planned" + UsertitleStatusTDropped UsertitleStatusT = "dropped" + UsertitleStatusTInProgress UsertitleStatusT = "in-progress" +) + +func (e *UsertitleStatusT) Scan(src interface{}) error { + switch s := src.(type) { + case []byte: + *e = UsertitleStatusT(s) + case string: + *e = UsertitleStatusT(s) + default: + return fmt.Errorf("unsupported scan type for UsertitleStatusT: %T", src) + } + return nil +} + +type NullUsertitleStatusT struct { + UsertitleStatusT UsertitleStatusT `json:"usertitle_status_t"` + Valid bool `json:"valid"` // Valid is true if UsertitleStatusT is not NULL +} + +// Scan implements the Scanner interface. +func (ns *NullUsertitleStatusT) Scan(value interface{}) error { + if value == nil { + ns.UsertitleStatusT, ns.Valid = "", false + return nil + } + ns.Valid = true + return ns.UsertitleStatusT.Scan(value) +} + +// Value implements the driver Valuer interface. +func (ns NullUsertitleStatusT) Value() (driver.Value, error) { + if !ns.Valid { + return nil, nil + } + return string(ns.UsertitleStatusT), nil +} + +type Images struct { + ImageID int32 `db:"image_id" json:"image_id"` + StorageType StorageTypeT `db:"storage_type" json:"storage_type"` + ImagePath string `db:"image_path" json:"image_path"` +} + +type Providers struct { + ProviderID int32 `db:"provider_id" json:"provider_id"` + ProviderName string `db:"provider_name" json:"provider_name"` +} + +type Reviews struct { + ReviewID int32 `db:"review_id" json:"review_id"` + UserID int32 `db:"user_id" json:"user_id"` + TitleID int32 `db:"title_id" json:"title_id"` + ImageIds []int32 `db:"image_ids" json:"image_ids"` + ReviewText string `db:"review_text" json:"review_text"` + CreationDate pgtype.Timestamp `db:"creation_date" json:"creation_date"` +} + +type Signals struct { + SignalID int32 `db:"signal_id" json:"signal_id"` + RawData []byte `db:"raw_data" json:"raw_data"` + ProviderID int32 `db:"provider_id" json:"provider_id"` + Dirty bool `db:"dirty" json:"dirty"` +} + +type Studios struct { + StudioID int32 `db:"studio_id" json:"studio_id"` + StudioName pgtype.Text `db:"studio_name" json:"studio_name"` + IllustID pgtype.Int4 `db:"illust_id" json:"illust_id"` + StudioDesc pgtype.Text `db:"studio_desc" json:"studio_desc"` +} + +type Tags struct { + TagID int32 `db:"tag_id" json:"tag_id"` + TagNames []byte `db:"tag_names" json:"tag_names"` +} + +type TitleTags struct { + TitleID int32 `db:"title_id" json:"title_id"` + TagID int32 `db:"tag_id" json:"tag_id"` +} + +type Titles struct { + TitleID int32 `db:"title_id" json:"title_id"` + TitleNames []byte `db:"title_names" json:"title_names"` + StudioID int32 `db:"studio_id" json:"studio_id"` + PosterID pgtype.Int4 `db:"poster_id" json:"poster_id"` + SignalIds []int32 `db:"signal_ids" json:"signal_ids"` + TitleStatus TitleStatusT `db:"title_status" json:"title_status"` + Rating pgtype.Float8 `db:"rating" json:"rating"` + RatingCount pgtype.Int4 `db:"rating_count" json:"rating_count"` + ReleaseYear pgtype.Int4 `db:"release_year" json:"release_year"` + ReleaseSeason NullReleaseSeasonT `db:"release_season" json:"release_season"` + Season pgtype.Int4 `db:"season" json:"season"` + EpisodesAired pgtype.Int4 `db:"episodes_aired" json:"episodes_aired"` + EpisodesAll pgtype.Int4 `db:"episodes_all" json:"episodes_all"` + EpisodesLen []byte `db:"episodes_len" json:"episodes_len"` +} + +type Users struct { + UserID int32 `db:"user_id" json:"user_id"` + AvatarID pgtype.Int4 `db:"avatar_id" json:"avatar_id"` + Passhash string `db:"passhash" json:"passhash"` + Mail pgtype.Text `db:"mail" json:"mail"` + Nickname string `db:"nickname" json:"nickname"` + DispName pgtype.Text `db:"disp_name" json:"disp_name"` + UserDesc pgtype.Text `db:"user_desc" json:"user_desc"` + CreationDate pgtype.Timestamp `db:"creation_date" json:"creation_date"` +} + +type Usertitles struct { + UsertitleID int32 `db:"usertitle_id" json:"usertitle_id"` + UserID int32 `db:"user_id" json:"user_id"` + TitleID int32 `db:"title_id" json:"title_id"` + Status UsertitleStatusT `db:"status" json:"status"` + Rate pgtype.Int4 `db:"rate" json:"rate"` + ReviewID pgtype.Int4 `db:"review_id" json:"review_id"` +} diff --git a/modules/backend/db/query.sql.go b/modules/backend/db/query.sql.go new file mode 100644 index 0000000..1fc06ac --- /dev/null +++ b/modules/backend/db/query.sql.go @@ -0,0 +1,712 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package db + +import ( + "context" + + "github.com/jackc/pgx/v5/pgtype" +) + +const createImage = `-- name: CreateImage :one +INSERT INTO images (storage_type, image_path) +VALUES ($1, $2) +RETURNING image_id, storage_type, image_path +` + +type CreateImageParams struct { + StorageType StorageTypeT `db:"storage_type" json:"storage_type"` + ImagePath string `db:"image_path" json:"image_path"` +} + +func (q *Queries) CreateImage(ctx context.Context, arg CreateImageParams) (Images, error) { + row := q.db.QueryRow(ctx, createImage, arg.StorageType, arg.ImagePath) + var i Images + err := row.Scan(&i.ImageID, &i.StorageType, &i.ImagePath) + return i, err +} + +const createReview = `-- name: CreateReview :one +INSERT INTO reviews (user_id, title_id, image_ids, review_text, creation_date) +VALUES ($1, $2, $3, $4, $5) +RETURNING review_id, user_id, title_id, image_ids, review_text, creation_date +` + +type CreateReviewParams struct { + UserID int32 `db:"user_id" json:"user_id"` + TitleID int32 `db:"title_id" json:"title_id"` + ImageIds []int32 `db:"image_ids" json:"image_ids"` + ReviewText string `db:"review_text" json:"review_text"` + CreationDate pgtype.Timestamp `db:"creation_date" json:"creation_date"` +} + +func (q *Queries) CreateReview(ctx context.Context, arg CreateReviewParams) (Reviews, error) { + row := q.db.QueryRow(ctx, createReview, + arg.UserID, + arg.TitleID, + arg.ImageIds, + arg.ReviewText, + arg.CreationDate, + ) + var i Reviews + err := row.Scan( + &i.ReviewID, + &i.UserID, + &i.TitleID, + &i.ImageIds, + &i.ReviewText, + &i.CreationDate, + ) + return i, err +} + +const createUser = `-- 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 +` + +type CreateUserParams struct { + AvatarID pgtype.Int4 `db:"avatar_id" json:"avatar_id"` + Passhash string `db:"passhash" json:"passhash"` + Mail pgtype.Text `db:"mail" json:"mail"` + Nickname string `db:"nickname" json:"nickname"` + DispName pgtype.Text `db:"disp_name" json:"disp_name"` + UserDesc pgtype.Text `db:"user_desc" json:"user_desc"` + CreationDate pgtype.Timestamp `db:"creation_date" json:"creation_date"` +} + +type CreateUserRow struct { + UserID int32 `db:"user_id" json:"user_id"` + AvatarID pgtype.Int4 `db:"avatar_id" json:"avatar_id"` + Nickname string `db:"nickname" json:"nickname"` + DispName pgtype.Text `db:"disp_name" json:"disp_name"` + UserDesc pgtype.Text `db:"user_desc" json:"user_desc"` + CreationDate pgtype.Timestamp `db:"creation_date" json:"creation_date"` +} + +func (q *Queries) CreateUser(ctx context.Context, arg CreateUserParams) (CreateUserRow, error) { + row := q.db.QueryRow(ctx, createUser, + arg.AvatarID, + arg.Passhash, + arg.Mail, + arg.Nickname, + arg.DispName, + arg.UserDesc, + arg.CreationDate, + ) + var i CreateUserRow + err := row.Scan( + &i.UserID, + &i.AvatarID, + &i.Nickname, + &i.DispName, + &i.UserDesc, + &i.CreationDate, + ) + return i, err +} + +const createUserTitle = `-- name: CreateUserTitle :one +INSERT INTO usertitles (user_id, title_id, status, rate, review_id) +VALUES ($1, $2, $3, $4, $5) +RETURNING usertitle_id, user_id, title_id, status, rate, review_id +` + +type CreateUserTitleParams struct { + UserID int32 `db:"user_id" json:"user_id"` + TitleID int32 `db:"title_id" json:"title_id"` + Status UsertitleStatusT `db:"status" json:"status"` + Rate pgtype.Int4 `db:"rate" json:"rate"` + ReviewID pgtype.Int4 `db:"review_id" json:"review_id"` +} + +func (q *Queries) CreateUserTitle(ctx context.Context, arg CreateUserTitleParams) (Usertitles, error) { + row := q.db.QueryRow(ctx, createUserTitle, + arg.UserID, + arg.TitleID, + arg.Status, + arg.Rate, + arg.ReviewID, + ) + var i Usertitles + err := row.Scan( + &i.UsertitleID, + &i.UserID, + &i.TitleID, + &i.Status, + &i.Rate, + &i.ReviewID, + ) + return i, err +} + +const deleteReview = `-- name: DeleteReview :exec +DELETE FROM reviews +WHERE review_id = $1 +` + +func (q *Queries) DeleteReview(ctx context.Context, reviewID int32) error { + _, err := q.db.Exec(ctx, deleteReview, reviewID) + return err +} + +const deleteUser = `-- name: DeleteUser :exec +DELETE FROM users +WHERE user_id = $1 +` + +func (q *Queries) DeleteUser(ctx context.Context, userID int32) error { + _, err := q.db.Exec(ctx, deleteUser, userID) + return err +} + +const deleteUserTitle = `-- name: DeleteUserTitle :exec +DELETE FROM usertitles +WHERE user_id = $1 AND ($2::int IS NULL OR title_id = $2) +` + +type DeleteUserTitleParams struct { + UserID int32 `db:"user_id" json:"user_id"` + Column2 int32 `db:"column_2" json:"column_2"` +} + +func (q *Queries) DeleteUserTitle(ctx context.Context, arg DeleteUserTitleParams) error { + _, err := q.db.Exec(ctx, deleteUserTitle, arg.UserID, arg.Column2) + return err +} + +const getImageByID = `-- name: GetImageByID :one +SELECT image_id, storage_type, image_path +FROM images +WHERE image_id = $1 +` + +func (q *Queries) GetImageByID(ctx context.Context, imageID int32) (Images, error) { + row := q.db.QueryRow(ctx, getImageByID, imageID) + var i Images + err := row.Scan(&i.ImageID, &i.StorageType, &i.ImagePath) + return i, err +} + +const getReviewByID = `-- name: GetReviewByID :one +SELECT review_id, user_id, title_id, image_ids, review_text, creation_date +FROM reviews +WHERE review_id = $1 +` + +func (q *Queries) GetReviewByID(ctx context.Context, reviewID int32) (Reviews, error) { + row := q.db.QueryRow(ctx, getReviewByID, reviewID) + var i Reviews + err := row.Scan( + &i.ReviewID, + &i.UserID, + &i.TitleID, + &i.ImageIds, + &i.ReviewText, + &i.CreationDate, + ) + return i, err +} + +const getTitleByID = `-- name: GetTitleByID :one +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 +WHERE title_id = $1 +` + +func (q *Queries) GetTitleByID(ctx context.Context, titleID int32) (Titles, error) { + row := q.db.QueryRow(ctx, getTitleByID, titleID) + var i Titles + err := row.Scan( + &i.TitleID, + &i.TitleNames, + &i.StudioID, + &i.PosterID, + &i.SignalIds, + &i.TitleStatus, + &i.Rating, + &i.RatingCount, + &i.ReleaseYear, + &i.ReleaseSeason, + &i.Season, + &i.EpisodesAired, + &i.EpisodesAll, + &i.EpisodesLen, + ) + return i, err +} + +const getUserByID = `-- name: GetUserByID :one +SELECT user_id, avatar_id, passhash, mail, nickname, disp_name, user_desc, creation_date +FROM users +WHERE user_id = $1 +` + +func (q *Queries) GetUserByID(ctx context.Context, userID int32) (Users, error) { + row := q.db.QueryRow(ctx, getUserByID, userID) + var i Users + err := row.Scan( + &i.UserID, + &i.AvatarID, + &i.Passhash, + &i.Mail, + &i.Nickname, + &i.DispName, + &i.UserDesc, + &i.CreationDate, + ) + return i, err +} + +const getUserTitle = `-- name: GetUserTitle :one +SELECT usertitle_id, user_id, title_id, status, rate, review_id +FROM usertitles +WHERE user_id = $1 AND title_id = $2 +` + +type GetUserTitleParams struct { + UserID int32 `db:"user_id" json:"user_id"` + TitleID int32 `db:"title_id" json:"title_id"` +} + +func (q *Queries) GetUserTitle(ctx context.Context, arg GetUserTitleParams) (Usertitles, error) { + row := q.db.QueryRow(ctx, getUserTitle, arg.UserID, arg.TitleID) + var i Usertitles + err := row.Scan( + &i.UsertitleID, + &i.UserID, + &i.TitleID, + &i.Status, + &i.Rate, + &i.ReviewID, + ) + return i, err +} + +const listReviewsByTitle = `-- name: ListReviewsByTitle :many +SELECT review_id, user_id, title_id, image_ids, review_text, creation_date +FROM reviews +WHERE title_id = $1 +ORDER BY creation_date DESC +LIMIT $2 OFFSET $3 +` + +type ListReviewsByTitleParams struct { + TitleID int32 `db:"title_id" json:"title_id"` + Limit int32 `db:"limit" json:"limit"` + Offset int32 `db:"offset" json:"offset"` +} + +func (q *Queries) ListReviewsByTitle(ctx context.Context, arg ListReviewsByTitleParams) ([]Reviews, error) { + rows, err := q.db.Query(ctx, listReviewsByTitle, arg.TitleID, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Reviews + for rows.Next() { + var i Reviews + if err := rows.Scan( + &i.ReviewID, + &i.UserID, + &i.TitleID, + &i.ImageIds, + &i.ReviewText, + &i.CreationDate, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listReviewsByUser = `-- name: ListReviewsByUser :many +SELECT review_id, user_id, title_id, image_ids, review_text, creation_date +FROM reviews +WHERE user_id = $1 +ORDER BY creation_date DESC +LIMIT $2 OFFSET $3 +` + +type ListReviewsByUserParams struct { + UserID int32 `db:"user_id" json:"user_id"` + Limit int32 `db:"limit" json:"limit"` + Offset int32 `db:"offset" json:"offset"` +} + +func (q *Queries) ListReviewsByUser(ctx context.Context, arg ListReviewsByUserParams) ([]Reviews, error) { + rows, err := q.db.Query(ctx, listReviewsByUser, arg.UserID, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Reviews + for rows.Next() { + var i Reviews + if err := rows.Scan( + &i.ReviewID, + &i.UserID, + &i.TitleID, + &i.ImageIds, + &i.ReviewText, + &i.CreationDate, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listTags = `-- name: ListTags :many +SELECT tag_id, tag_names +FROM tags +ORDER BY tag_id +LIMIT $1 OFFSET $2 +` + +type ListTagsParams struct { + Limit int32 `db:"limit" json:"limit"` + Offset int32 `db:"offset" json:"offset"` +} + +func (q *Queries) ListTags(ctx context.Context, arg ListTagsParams) ([]Tags, error) { + rows, err := q.db.Query(ctx, listTags, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Tags + for rows.Next() { + var i Tags + if err := rows.Scan(&i.TagID, &i.TagNames); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listTitles = `-- 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 +` + +type ListTitlesParams struct { + Limit int32 `db:"limit" json:"limit"` + Offset int32 `db:"offset" json:"offset"` +} + +func (q *Queries) ListTitles(ctx context.Context, arg ListTitlesParams) ([]Titles, error) { + rows, err := q.db.Query(ctx, listTitles, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Titles + for rows.Next() { + var i Titles + if err := rows.Scan( + &i.TitleID, + &i.TitleNames, + &i.StudioID, + &i.PosterID, + &i.SignalIds, + &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 listUserTitles = `-- name: ListUserTitles :many +SELECT usertitle_id, user_id, title_id, status, rate, review_id +FROM usertitles +WHERE user_id = $1 +ORDER BY usertitle_id +LIMIT $2 OFFSET $3 +` + +type ListUserTitlesParams struct { + UserID int32 `db:"user_id" json:"user_id"` + Limit int32 `db:"limit" json:"limit"` + Offset int32 `db:"offset" json:"offset"` +} + +func (q *Queries) ListUserTitles(ctx context.Context, arg ListUserTitlesParams) ([]Usertitles, error) { + rows, err := q.db.Query(ctx, listUserTitles, arg.UserID, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Usertitles + for rows.Next() { + var i Usertitles + if err := rows.Scan( + &i.UsertitleID, + &i.UserID, + &i.TitleID, + &i.Status, + &i.Rate, + &i.ReviewID, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listUsers = `-- 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 +` + +type ListUsersParams struct { + Limit int32 `db:"limit" json:"limit"` + Offset int32 `db:"offset" json:"offset"` +} + +func (q *Queries) ListUsers(ctx context.Context, arg ListUsersParams) ([]Users, error) { + rows, err := q.db.Query(ctx, listUsers, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Users + for rows.Next() { + var i Users + if err := rows.Scan( + &i.UserID, + &i.AvatarID, + &i.Passhash, + &i.Mail, + &i.Nickname, + &i.DispName, + &i.UserDesc, + &i.CreationDate, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const updateReview = `-- name: UpdateReview :one +UPDATE reviews +SET + image_ids = COALESCE($1, image_ids), + review_text = COALESCE($2, review_text) +WHERE review_id = $3 +RETURNING review_id, user_id, title_id, image_ids, review_text, creation_date +` + +type UpdateReviewParams struct { + ImageIds []int32 `db:"image_ids" json:"image_ids"` + ReviewText pgtype.Text `db:"review_text" json:"review_text"` + ReviewID int32 `db:"review_id" json:"review_id"` +} + +func (q *Queries) UpdateReview(ctx context.Context, arg UpdateReviewParams) (Reviews, error) { + row := q.db.QueryRow(ctx, updateReview, arg.ImageIds, arg.ReviewText, arg.ReviewID) + var i Reviews + err := row.Scan( + &i.ReviewID, + &i.UserID, + &i.TitleID, + &i.ImageIds, + &i.ReviewText, + &i.CreationDate, + ) + return i, err +} + +const updateTitle = `-- name: UpdateTitle :one +UPDATE titles +SET + title_names = COALESCE($1, title_names), + studio_id = COALESCE($2, studio_id), + poster_id = COALESCE($3, poster_id), + signal_ids = COALESCE($4, signal_ids), + title_status = COALESCE($5, title_status), + release_year = COALESCE($6, release_year), + release_season = COALESCE($7, release_season), + episodes_aired = COALESCE($8, episodes_aired), + episodes_all = COALESCE($9, episodes_all), + episodes_len = COALESCE($10, episodes_len) +WHERE title_id = $11 +RETURNING 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 +` + +type UpdateTitleParams struct { + TitleNames []byte `db:"title_names" json:"title_names"` + StudioID pgtype.Int4 `db:"studio_id" json:"studio_id"` + PosterID pgtype.Int4 `db:"poster_id" json:"poster_id"` + SignalIds []int32 `db:"signal_ids" json:"signal_ids"` + TitleStatus NullTitleStatusT `db:"title_status" json:"title_status"` + ReleaseYear pgtype.Int4 `db:"release_year" json:"release_year"` + ReleaseSeason NullReleaseSeasonT `db:"release_season" json:"release_season"` + EpisodesAired pgtype.Int4 `db:"episodes_aired" json:"episodes_aired"` + EpisodesAll pgtype.Int4 `db:"episodes_all" json:"episodes_all"` + EpisodesLen []byte `db:"episodes_len" json:"episodes_len"` + TitleID int32 `db:"title_id" json:"title_id"` +} + +func (q *Queries) UpdateTitle(ctx context.Context, arg UpdateTitleParams) (Titles, error) { + row := q.db.QueryRow(ctx, updateTitle, + arg.TitleNames, + arg.StudioID, + arg.PosterID, + arg.SignalIds, + arg.TitleStatus, + arg.ReleaseYear, + arg.ReleaseSeason, + arg.EpisodesAired, + arg.EpisodesAll, + arg.EpisodesLen, + arg.TitleID, + ) + var i Titles + err := row.Scan( + &i.TitleID, + &i.TitleNames, + &i.StudioID, + &i.PosterID, + &i.SignalIds, + &i.TitleStatus, + &i.Rating, + &i.RatingCount, + &i.ReleaseYear, + &i.ReleaseSeason, + &i.Season, + &i.EpisodesAired, + &i.EpisodesAll, + &i.EpisodesLen, + ) + return i, err +} + +const updateUser = `-- name: UpdateUser :one +UPDATE users +SET + avatar_id = COALESCE($1, avatar_id), + disp_name = COALESCE($2, disp_name), + user_desc = COALESCE($3, user_desc) +WHERE user_id = $4 +RETURNING user_id, avatar_id, nickname, disp_name, user_desc, creation_date +` + +type UpdateUserParams struct { + AvatarID pgtype.Int4 `db:"avatar_id" json:"avatar_id"` + DispName pgtype.Text `db:"disp_name" json:"disp_name"` + UserDesc pgtype.Text `db:"user_desc" json:"user_desc"` + UserID int32 `db:"user_id" json:"user_id"` +} + +type UpdateUserRow struct { + UserID int32 `db:"user_id" json:"user_id"` + AvatarID pgtype.Int4 `db:"avatar_id" json:"avatar_id"` + Nickname string `db:"nickname" json:"nickname"` + DispName pgtype.Text `db:"disp_name" json:"disp_name"` + UserDesc pgtype.Text `db:"user_desc" json:"user_desc"` + CreationDate pgtype.Timestamp `db:"creation_date" json:"creation_date"` +} + +func (q *Queries) UpdateUser(ctx context.Context, arg UpdateUserParams) (UpdateUserRow, error) { + row := q.db.QueryRow(ctx, updateUser, + arg.AvatarID, + arg.DispName, + arg.UserDesc, + arg.UserID, + ) + var i UpdateUserRow + err := row.Scan( + &i.UserID, + &i.AvatarID, + &i.Nickname, + &i.DispName, + &i.UserDesc, + &i.CreationDate, + ) + return i, err +} + +const updateUserTitle = `-- name: UpdateUserTitle :one +UPDATE usertitles +SET + status = COALESCE($3, status), + rate = COALESCE($4, rate), + review_id = COALESCE($5, review_id) +WHERE user_id = $1 AND title_id = $2 +RETURNING usertitle_id, user_id, title_id, status, rate, review_id +` + +type UpdateUserTitleParams struct { + UserID int32 `db:"user_id" json:"user_id"` + TitleID int32 `db:"title_id" json:"title_id"` + Status NullUsertitleStatusT `db:"status" json:"status"` + Rate pgtype.Int4 `db:"rate" json:"rate"` + ReviewID pgtype.Int4 `db:"review_id" json:"review_id"` +} + +func (q *Queries) UpdateUserTitle(ctx context.Context, arg UpdateUserTitleParams) (Usertitles, error) { + row := q.db.QueryRow(ctx, updateUserTitle, + arg.UserID, + arg.TitleID, + arg.Status, + arg.Rate, + arg.ReviewID, + ) + var i Usertitles + err := row.Scan( + &i.UsertitleID, + &i.UserID, + &i.TitleID, + &i.Status, + &i.Rate, + &i.ReviewID, + ) + return i, err +}