Co-authored-by: dev_agent <dev_agent@cubecraftlabs.com> Co-committed-by: dev_agent <dev_agent@cubecraftlabs.com>
299 lines
6.8 KiB
Go
299 lines
6.8 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.31.1
|
|
// source: recipes.sql
|
|
|
|
package db
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
)
|
|
|
|
const createRecipeIngredient = `-- name: CreateRecipeIngredient :exec
|
|
INSERT INTO recipe_ingredients (
|
|
id, recipe_id, position, raw_text, name, qty, unit, note,
|
|
created_at, updated_at
|
|
) VALUES (
|
|
?, ?, ?, ?, ?, ?, ?, ?,
|
|
?, ?
|
|
)
|
|
`
|
|
|
|
type CreateRecipeIngredientParams struct {
|
|
ID string
|
|
RecipeID string
|
|
Position int64
|
|
RawText string
|
|
Name sql.NullString
|
|
Qty sql.NullString
|
|
Unit sql.NullString
|
|
Note sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
func (q *Queries) CreateRecipeIngredient(ctx context.Context, arg CreateRecipeIngredientParams) error {
|
|
_, err := q.db.ExecContext(ctx, createRecipeIngredient,
|
|
arg.ID,
|
|
arg.RecipeID,
|
|
arg.Position,
|
|
arg.RawText,
|
|
arg.Name,
|
|
arg.Qty,
|
|
arg.Unit,
|
|
arg.Note,
|
|
arg.CreatedAt,
|
|
arg.UpdatedAt,
|
|
)
|
|
return err
|
|
}
|
|
|
|
const createRecipeStep = `-- name: CreateRecipeStep :exec
|
|
INSERT INTO recipe_steps (
|
|
id, recipe_id, position, text, created_at, updated_at
|
|
) VALUES (
|
|
?, ?, ?, ?, ?, ?
|
|
)
|
|
`
|
|
|
|
type CreateRecipeStepParams struct {
|
|
ID string
|
|
RecipeID string
|
|
Position int64
|
|
Text string
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
func (q *Queries) CreateRecipeStep(ctx context.Context, arg CreateRecipeStepParams) error {
|
|
_, err := q.db.ExecContext(ctx, createRecipeStep,
|
|
arg.ID,
|
|
arg.RecipeID,
|
|
arg.Position,
|
|
arg.Text,
|
|
arg.CreatedAt,
|
|
arg.UpdatedAt,
|
|
)
|
|
return err
|
|
}
|
|
|
|
const deleteRecipeIngredients = `-- name: DeleteRecipeIngredients :exec
|
|
DELETE FROM recipe_ingredients
|
|
WHERE recipe_id = ?
|
|
`
|
|
|
|
func (q *Queries) DeleteRecipeIngredients(ctx context.Context, recipeID string) error {
|
|
_, err := q.db.ExecContext(ctx, deleteRecipeIngredients, recipeID)
|
|
return err
|
|
}
|
|
|
|
const deleteRecipeSteps = `-- name: DeleteRecipeSteps :exec
|
|
DELETE FROM recipe_steps
|
|
WHERE recipe_id = ?
|
|
`
|
|
|
|
func (q *Queries) DeleteRecipeSteps(ctx context.Context, recipeID string) error {
|
|
_, err := q.db.ExecContext(ctx, deleteRecipeSteps, recipeID)
|
|
return err
|
|
}
|
|
|
|
const getRecipe = `-- name: GetRecipe :one
|
|
SELECT id, source_url, site_name, title, total_minutes, prep_minutes, cook_minutes, yield, raw_jsonld, fetched_at, created_at, updated_at FROM recipes
|
|
WHERE id = ?
|
|
`
|
|
|
|
func (q *Queries) GetRecipe(ctx context.Context, id string) (Recipe, error) {
|
|
row := q.db.QueryRowContext(ctx, getRecipe, id)
|
|
var i Recipe
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.SourceUrl,
|
|
&i.SiteName,
|
|
&i.Title,
|
|
&i.TotalMinutes,
|
|
&i.PrepMinutes,
|
|
&i.CookMinutes,
|
|
&i.Yield,
|
|
&i.RawJsonld,
|
|
&i.FetchedAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const getRecipeBySourceURL = `-- name: GetRecipeBySourceURL :one
|
|
SELECT id, source_url, site_name, title, total_minutes, prep_minutes, cook_minutes, yield, raw_jsonld, fetched_at, created_at, updated_at FROM recipes
|
|
WHERE source_url = ?
|
|
`
|
|
|
|
func (q *Queries) GetRecipeBySourceURL(ctx context.Context, sourceUrl string) (Recipe, error) {
|
|
row := q.db.QueryRowContext(ctx, getRecipeBySourceURL, sourceUrl)
|
|
var i Recipe
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.SourceUrl,
|
|
&i.SiteName,
|
|
&i.Title,
|
|
&i.TotalMinutes,
|
|
&i.PrepMinutes,
|
|
&i.CookMinutes,
|
|
&i.Yield,
|
|
&i.RawJsonld,
|
|
&i.FetchedAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const listRecipeIngredients = `-- name: ListRecipeIngredients :many
|
|
SELECT id, recipe_id, position, raw_text, name, qty, unit, note, created_at, updated_at FROM recipe_ingredients
|
|
WHERE recipe_id = ?
|
|
ORDER BY position, id
|
|
`
|
|
|
|
func (q *Queries) ListRecipeIngredients(ctx context.Context, recipeID string) ([]RecipeIngredient, error) {
|
|
rows, err := q.db.QueryContext(ctx, listRecipeIngredients, recipeID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []RecipeIngredient
|
|
for rows.Next() {
|
|
var i RecipeIngredient
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.RecipeID,
|
|
&i.Position,
|
|
&i.RawText,
|
|
&i.Name,
|
|
&i.Qty,
|
|
&i.Unit,
|
|
&i.Note,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
); 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 listRecipeSteps = `-- name: ListRecipeSteps :many
|
|
SELECT id, recipe_id, position, text, created_at, updated_at FROM recipe_steps
|
|
WHERE recipe_id = ?
|
|
ORDER BY position, id
|
|
`
|
|
|
|
func (q *Queries) ListRecipeSteps(ctx context.Context, recipeID string) ([]RecipeStep, error) {
|
|
rows, err := q.db.QueryContext(ctx, listRecipeSteps, recipeID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []RecipeStep
|
|
for rows.Next() {
|
|
var i RecipeStep
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.RecipeID,
|
|
&i.Position,
|
|
&i.Text,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
); 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 upsertRecipe = `-- name: UpsertRecipe :one
|
|
INSERT INTO recipes (
|
|
id, source_url, site_name, title, total_minutes, prep_minutes,
|
|
cook_minutes, yield, raw_jsonld, fetched_at, created_at, updated_at
|
|
) VALUES (
|
|
?, ?, ?, ?, ?, ?,
|
|
?, ?, ?, ?, ?, ?
|
|
)
|
|
ON CONFLICT (source_url) DO UPDATE SET
|
|
site_name = excluded.site_name,
|
|
title = excluded.title,
|
|
total_minutes = excluded.total_minutes,
|
|
prep_minutes = excluded.prep_minutes,
|
|
cook_minutes = excluded.cook_minutes,
|
|
yield = excluded.yield,
|
|
raw_jsonld = excluded.raw_jsonld,
|
|
fetched_at = excluded.fetched_at,
|
|
updated_at = excluded.updated_at
|
|
RETURNING id, source_url, site_name, title, total_minutes, prep_minutes, cook_minutes, yield, raw_jsonld, fetched_at, created_at, updated_at
|
|
`
|
|
|
|
type UpsertRecipeParams struct {
|
|
ID string
|
|
SourceUrl string
|
|
SiteName sql.NullString
|
|
Title string
|
|
TotalMinutes sql.NullInt64
|
|
PrepMinutes sql.NullInt64
|
|
CookMinutes sql.NullInt64
|
|
Yield sql.NullString
|
|
RawJsonld string
|
|
FetchedAt string
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
// A recipe is keyed by source_url: re-fetching the same URL updates the
|
|
// existing row and keeps its id and created_at, which the returned row
|
|
// carries. Replace its ingredients and steps in the same transaction with
|
|
// DeleteRecipeIngredients/DeleteRecipeSteps then the Create queries.
|
|
func (q *Queries) UpsertRecipe(ctx context.Context, arg UpsertRecipeParams) (Recipe, error) {
|
|
row := q.db.QueryRowContext(ctx, upsertRecipe,
|
|
arg.ID,
|
|
arg.SourceUrl,
|
|
arg.SiteName,
|
|
arg.Title,
|
|
arg.TotalMinutes,
|
|
arg.PrepMinutes,
|
|
arg.CookMinutes,
|
|
arg.Yield,
|
|
arg.RawJsonld,
|
|
arg.FetchedAt,
|
|
arg.CreatedAt,
|
|
arg.UpdatedAt,
|
|
)
|
|
var i Recipe
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.SourceUrl,
|
|
&i.SiteName,
|
|
&i.Title,
|
|
&i.TotalMinutes,
|
|
&i.PrepMinutes,
|
|
&i.CookMinutes,
|
|
&i.Yield,
|
|
&i.RawJsonld,
|
|
&i.FetchedAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
)
|
|
return i, err
|
|
}
|