// Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.20.0 // source: locations.sql package db import ( "context" "database/sql" ) const createLocation = `-- name: CreateLocation :exec INSERT INTO locations( address, name, submitted_by, regency_id, google_maps_link ) values ( $1, $2, $3, $4, $5 ) ` type CreateLocationParams struct { Address string `json:"address"` Name string `json:"name"` SubmittedBy int32 `json:"submitted_by"` RegencyID int16 `json:"regency_id"` GoogleMapsLink sql.NullString `json:"google_maps_link"` } func (q *Queries) CreateLocation(ctx context.Context, arg CreateLocationParams) error { _, err := q.db.ExecContext(ctx, createLocation, arg.Address, arg.Name, arg.SubmittedBy, arg.RegencyID, arg.GoogleMapsLink, ) return err } const getListLocations = `-- name: GetListLocations :many SELECT id, address, name, google_maps_link, submitted_by, total_visited, thumbnail, regency_id, is_deleted, created_at, updated_at, approved_by, approved_at FROM locations ` func (q *Queries) GetListLocations(ctx context.Context) ([]Location, error) { rows, err := q.db.QueryContext(ctx, getListLocations) if err != nil { return nil, err } defer rows.Close() items := []Location{} for rows.Next() { var i Location if err := rows.Scan( &i.ID, &i.Address, &i.Name, &i.GoogleMapsLink, &i.SubmittedBy, &i.TotalVisited, &i.Thumbnail, &i.RegencyID, &i.IsDeleted, &i.CreatedAt, &i.UpdatedAt, &i.ApprovedBy, &i.ApprovedAt, ); err != nil { return nil, err } items = append(items, i) } if err := rows.Close(); err != nil { return nil, err } if err := rows.Err(); err != nil { return nil, err } return items, nil } const getListRecentLocationsWithRatings = `-- name: GetListRecentLocationsWithRatings :many SELECT l.id, name, thumbnail, re.regency_name, (SELECT COALESCE(SUM(score), -1) from reviews re where re.is_from_critic = true and re.location_id = l.id) as critic_score, (SELECT COUNT(id) from reviews re where re.is_from_critic = true and re.location_id = l.id) as critic_count, (SELECT COALESCE(SUM(score), -1) from reviews re where re.is_from_critic = false and re.location_id = l.id) as user_score, (SELECT COUNT(id) from reviews re where re.is_from_critic = false and re.location_id = l.id) as user_count FROM locations l JOIN regencies re on re.id = l.regency_id WHERE approved_by IS NOT NULL ORDER BY l.created_at ASC LIMIT $1 ` type GetListRecentLocationsWithRatingsRow struct { ID int32 `json:"id"` Name string `json:"name"` Thumbnail sql.NullString `json:"thumbnail"` RegencyName sql.NullString `json:"regency_name"` CriticScore interface{} `json:"critic_score"` CriticCount int64 `json:"critic_count"` UserScore interface{} `json:"user_score"` UserCount int64 `json:"user_count"` } func (q *Queries) GetListRecentLocationsWithRatings(ctx context.Context, limit int32) ([]GetListRecentLocationsWithRatingsRow, error) { rows, err := q.db.QueryContext(ctx, getListRecentLocationsWithRatings, limit) if err != nil { return nil, err } defer rows.Close() items := []GetListRecentLocationsWithRatingsRow{} for rows.Next() { var i GetListRecentLocationsWithRatingsRow if err := rows.Scan( &i.ID, &i.Name, &i.Thumbnail, &i.RegencyName, &i.CriticScore, &i.CriticCount, &i.UserScore, &i.UserCount, ); err != nil { return nil, err } items = append(items, i) } if err := rows.Close(); err != nil { return nil, err } if err := rows.Err(); err != nil { return nil, err } return items, nil } const getLocation = `-- name: GetLocation :one SELECT id, address, name, google_maps_link, submitted_by, total_visited, thumbnail, regency_id, is_deleted, created_at, updated_at, approved_by, approved_at FROM locations WHERE id = $1 ` // https://fulmicoton.com/posts/bayesian_rating/ // SELECT // // *, // (SELECT 5 * 4 + coalesce(critic_score, 0) * coalesce(critic_count, 0) / 5 + coalesce(critic_count, 0)) as critic_bayes, // (SELECT 50 + coalesce(user_score, 0) * coalesce(user_count, 0) / 50 + coalesce(user_count, 0)) as user_bayes, // ((SELECT 50 + coalesce(user_score, 0) * coalesce(user_count, 0) / 50 + coalesce(user_count, 0)) + (SELECT 5 * 4 + coalesce(critic_score, 0) * coalesce(critic_count, 0) / 5 + coalesce(critic_count, 0)) ) / 2 as avg_bayes // // FROM ( // // SELECT // l.id, // name, // thumbnail, // re.regency_name, // (SELECT SUM(score) from reviews re where re.is_from_critic = true and re.location_id = l.id) as critic_score, // (SELECT COUNT(id) from reviews re where re.is_from_critic = true and re.location_id = l.id) as critic_count, // (SELECT SUM(score) from reviews re where re.is_from_critic = false and re.location_id = l.id) as user_score, // (SELECT COUNT(id) from reviews re where re.is_from_critic = false and re.location_id = l.id) as user_count // FROM locations l // JOIN regencies re on re.id = l.regency_id // WHERE approved_by IS NOT NULL) iq1 // // ORDER BY avg_bayes DESC // LIMIT $1 // OFFSET $2; func (q *Queries) GetLocation(ctx context.Context, id int32) (Location, error) { row := q.db.QueryRowContext(ctx, getLocation, id) var i Location err := row.Scan( &i.ID, &i.Address, &i.Name, &i.GoogleMapsLink, &i.SubmittedBy, &i.TotalVisited, &i.Thumbnail, &i.RegencyID, &i.IsDeleted, &i.CreatedAt, &i.UpdatedAt, &i.ApprovedBy, &i.ApprovedAt, ) return i, err }