223 lines
5.3 KiB
Go
223 lines
5.3 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.30.0
|
|
// source: ratings.sql
|
|
|
|
package dbgen
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
const CountRatingsByTarget = `-- name: CountRatingsByTarget :one
|
|
SELECT COUNT(*)::BIGINT
|
|
FROM ratings
|
|
WHERE target_type = $1 AND target_id = $2
|
|
`
|
|
|
|
type CountRatingsByTargetParams struct {
|
|
TargetType string `json:"target_type"`
|
|
TargetID int64 `json:"target_id"`
|
|
}
|
|
|
|
func (q *Queries) CountRatingsByTarget(ctx context.Context, arg CountRatingsByTargetParams) (int64, error) {
|
|
row := q.db.QueryRow(ctx, CountRatingsByTarget, arg.TargetType, arg.TargetID)
|
|
var column_1 int64
|
|
err := row.Scan(&column_1)
|
|
return column_1, err
|
|
}
|
|
|
|
const DeleteRating = `-- name: DeleteRating :exec
|
|
DELETE FROM ratings
|
|
WHERE id = $1 AND user_id = $2
|
|
`
|
|
|
|
type DeleteRatingParams struct {
|
|
ID int64 `json:"id"`
|
|
UserID int64 `json:"user_id"`
|
|
}
|
|
|
|
func (q *Queries) DeleteRating(ctx context.Context, arg DeleteRatingParams) error {
|
|
_, err := q.db.Exec(ctx, DeleteRating, arg.ID, arg.UserID)
|
|
return err
|
|
}
|
|
|
|
const GetRatingByUserAndTarget = `-- name: GetRatingByUserAndTarget :one
|
|
SELECT id, user_id, target_type, target_id, stars, review, created_at, updated_at
|
|
FROM ratings
|
|
WHERE user_id = $1 AND target_type = $2 AND target_id = $3
|
|
`
|
|
|
|
type GetRatingByUserAndTargetParams struct {
|
|
UserID int64 `json:"user_id"`
|
|
TargetType string `json:"target_type"`
|
|
TargetID int64 `json:"target_id"`
|
|
}
|
|
|
|
func (q *Queries) GetRatingByUserAndTarget(ctx context.Context, arg GetRatingByUserAndTargetParams) (Rating, error) {
|
|
row := q.db.QueryRow(ctx, GetRatingByUserAndTarget, arg.UserID, arg.TargetType, arg.TargetID)
|
|
var i Rating
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.UserID,
|
|
&i.TargetType,
|
|
&i.TargetID,
|
|
&i.Stars,
|
|
&i.Review,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const GetRatingSummary = `-- name: GetRatingSummary :one
|
|
SELECT
|
|
COUNT(*)::BIGINT AS total_count,
|
|
COALESCE(AVG(stars), 0)::FLOAT AS average_stars
|
|
FROM ratings
|
|
WHERE target_type = $1 AND target_id = $2
|
|
`
|
|
|
|
type GetRatingSummaryParams struct {
|
|
TargetType string `json:"target_type"`
|
|
TargetID int64 `json:"target_id"`
|
|
}
|
|
|
|
type GetRatingSummaryRow struct {
|
|
TotalCount int64 `json:"total_count"`
|
|
AverageStars float64 `json:"average_stars"`
|
|
}
|
|
|
|
func (q *Queries) GetRatingSummary(ctx context.Context, arg GetRatingSummaryParams) (GetRatingSummaryRow, error) {
|
|
row := q.db.QueryRow(ctx, GetRatingSummary, arg.TargetType, arg.TargetID)
|
|
var i GetRatingSummaryRow
|
|
err := row.Scan(&i.TotalCount, &i.AverageStars)
|
|
return i, err
|
|
}
|
|
|
|
const GetRatingsByTarget = `-- name: GetRatingsByTarget :many
|
|
SELECT id, user_id, target_type, target_id, stars, review, created_at, updated_at
|
|
FROM ratings
|
|
WHERE target_type = $1 AND target_id = $2
|
|
ORDER BY created_at DESC
|
|
LIMIT $4::INT
|
|
OFFSET $3::INT
|
|
`
|
|
|
|
type GetRatingsByTargetParams struct {
|
|
TargetType string `json:"target_type"`
|
|
TargetID int64 `json:"target_id"`
|
|
Offset pgtype.Int4 `json:"offset"`
|
|
Limit pgtype.Int4 `json:"limit"`
|
|
}
|
|
|
|
func (q *Queries) GetRatingsByTarget(ctx context.Context, arg GetRatingsByTargetParams) ([]Rating, error) {
|
|
rows, err := q.db.Query(ctx, GetRatingsByTarget,
|
|
arg.TargetType,
|
|
arg.TargetID,
|
|
arg.Offset,
|
|
arg.Limit,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []Rating
|
|
for rows.Next() {
|
|
var i Rating
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.UserID,
|
|
&i.TargetType,
|
|
&i.TargetID,
|
|
&i.Stars,
|
|
&i.Review,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, i)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const GetUserRatings = `-- name: GetUserRatings :many
|
|
SELECT id, user_id, target_type, target_id, stars, review, created_at, updated_at
|
|
FROM ratings
|
|
WHERE user_id = $1
|
|
ORDER BY updated_at DESC
|
|
`
|
|
|
|
func (q *Queries) GetUserRatings(ctx context.Context, userID int64) ([]Rating, error) {
|
|
rows, err := q.db.Query(ctx, GetUserRatings, userID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []Rating
|
|
for rows.Next() {
|
|
var i Rating
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.UserID,
|
|
&i.TargetType,
|
|
&i.TargetID,
|
|
&i.Stars,
|
|
&i.Review,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, i)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const UpsertRating = `-- name: UpsertRating :one
|
|
INSERT INTO ratings (user_id, target_type, target_id, stars, review)
|
|
VALUES ($1, $2, $3, $4, $5)
|
|
ON CONFLICT (user_id, target_type, target_id)
|
|
DO UPDATE SET stars = EXCLUDED.stars, review = EXCLUDED.review, updated_at = NOW()
|
|
RETURNING id, user_id, target_type, target_id, stars, review, created_at, updated_at
|
|
`
|
|
|
|
type UpsertRatingParams struct {
|
|
UserID int64 `json:"user_id"`
|
|
TargetType string `json:"target_type"`
|
|
TargetID int64 `json:"target_id"`
|
|
Stars int16 `json:"stars"`
|
|
Review pgtype.Text `json:"review"`
|
|
}
|
|
|
|
func (q *Queries) UpsertRating(ctx context.Context, arg UpsertRatingParams) (Rating, error) {
|
|
row := q.db.QueryRow(ctx, UpsertRating,
|
|
arg.UserID,
|
|
arg.TargetType,
|
|
arg.TargetID,
|
|
arg.Stars,
|
|
arg.Review,
|
|
)
|
|
var i Rating
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.UserID,
|
|
&i.TargetType,
|
|
&i.TargetID,
|
|
&i.Stars,
|
|
&i.Review,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
)
|
|
return i, err
|
|
}
|