CI / ci (push) Successful in 8m31s
Co-authored-by: orchestrator-agent <20+orchestrator-agent@code.cubecraftcreations.com>
534 lines
14 KiB
Go
534 lines
14 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.31.1
|
|
// source: shopping.sql
|
|
|
|
package db
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
)
|
|
|
|
const beginShoppingListChatSend = `-- name: BeginShoppingListChatSend :execrows
|
|
UPDATE shopping_lists
|
|
SET chat_send_unconfirmed_at = ?, updated_at = ?
|
|
WHERE id = ? AND status = 'current' AND frozen_at IS NULL
|
|
`
|
|
|
|
type BeginShoppingListChatSendParams struct {
|
|
ChatSendUnconfirmedAt sql.NullString
|
|
UpdatedAt string
|
|
ID string
|
|
}
|
|
|
|
// Records a send of list id to Google Chat begun at
|
|
// chat_send_unconfirmed_at, before it is posted, unless the list is frozen
|
|
// into the Supply archive.
|
|
func (q *Queries) BeginShoppingListChatSend(ctx context.Context, arg BeginShoppingListChatSendParams) (int64, error) {
|
|
result, err := q.db.ExecContext(ctx, beginShoppingListChatSend, arg.ChatSendUnconfirmedAt, arg.UpdatedAt, arg.ID)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return result.RowsAffected()
|
|
}
|
|
|
|
const clearShoppingListChatSend = `-- name: ClearShoppingListChatSend :execrows
|
|
UPDATE shopping_lists
|
|
SET chat_send_unconfirmed_at = NULL, updated_at = ?
|
|
WHERE id = ?
|
|
`
|
|
|
|
type ClearShoppingListChatSendParams struct {
|
|
UpdatedAt string
|
|
ID string
|
|
}
|
|
|
|
// Clears the send of list id begun, once Google Chat refused it.
|
|
func (q *Queries) ClearShoppingListChatSend(ctx context.Context, arg ClearShoppingListChatSendParams) (int64, error) {
|
|
result, err := q.db.ExecContext(ctx, clearShoppingListChatSend, arg.UpdatedAt, arg.ID)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return result.RowsAffected()
|
|
}
|
|
|
|
const createShoppingGroup = `-- name: CreateShoppingGroup :exec
|
|
INSERT INTO shopping_groups (id, list_id, dinner_id, date, position, created_at, updated_at)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
`
|
|
|
|
type CreateShoppingGroupParams struct {
|
|
ID string
|
|
ListID string
|
|
DinnerID string
|
|
Date string
|
|
Position int64
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
func (q *Queries) CreateShoppingGroup(ctx context.Context, arg CreateShoppingGroupParams) error {
|
|
_, err := q.db.ExecContext(ctx, createShoppingGroup,
|
|
arg.ID,
|
|
arg.ListID,
|
|
arg.DinnerID,
|
|
arg.Date,
|
|
arg.Position,
|
|
arg.CreatedAt,
|
|
arg.UpdatedAt,
|
|
)
|
|
return err
|
|
}
|
|
|
|
const createShoppingItem = `-- name: CreateShoppingItem :exec
|
|
INSERT INTO shopping_items (id, group_id, name, qty, needed, position, created_at, updated_at)
|
|
VALUES (?, ?, ?, ?, 1, ?, ?, ?)
|
|
`
|
|
|
|
type CreateShoppingItemParams struct {
|
|
ID string
|
|
GroupID string
|
|
Name string
|
|
Qty sql.NullString
|
|
Position int64
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
// A new item is needed until the household marks it "have it".
|
|
func (q *Queries) CreateShoppingItem(ctx context.Context, arg CreateShoppingItemParams) error {
|
|
_, err := q.db.ExecContext(ctx, createShoppingItem,
|
|
arg.ID,
|
|
arg.GroupID,
|
|
arg.Name,
|
|
arg.Qty,
|
|
arg.Position,
|
|
arg.CreatedAt,
|
|
arg.UpdatedAt,
|
|
)
|
|
return err
|
|
}
|
|
|
|
const createShoppingList = `-- name: CreateShoppingList :exec
|
|
INSERT INTO shopping_lists (id, week_start, plan_id, status, created_at, updated_at)
|
|
VALUES (?, ?, ?, 'current', ?, ?)
|
|
`
|
|
|
|
type CreateShoppingListParams struct {
|
|
ID string
|
|
WeekStart string
|
|
PlanID string
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
// A new, untitled Supply run: the title is written later, by the AI.
|
|
func (q *Queries) CreateShoppingList(ctx context.Context, arg CreateShoppingListParams) error {
|
|
_, err := q.db.ExecContext(ctx, createShoppingList,
|
|
arg.ID,
|
|
arg.WeekStart,
|
|
arg.PlanID,
|
|
arg.CreatedAt,
|
|
arg.UpdatedAt,
|
|
)
|
|
return err
|
|
}
|
|
|
|
const deleteShoppingGroup = `-- name: DeleteShoppingGroup :exec
|
|
DELETE FROM shopping_groups
|
|
WHERE id = ?
|
|
`
|
|
|
|
func (q *Queries) DeleteShoppingGroup(ctx context.Context, id string) error {
|
|
_, err := q.db.ExecContext(ctx, deleteShoppingGroup, id)
|
|
return err
|
|
}
|
|
|
|
const deleteShoppingItem = `-- name: DeleteShoppingItem :exec
|
|
DELETE FROM shopping_items
|
|
WHERE id = ?
|
|
`
|
|
|
|
func (q *Queries) DeleteShoppingItem(ctx context.Context, id string) error {
|
|
_, err := q.db.ExecContext(ctx, deleteShoppingItem, id)
|
|
return err
|
|
}
|
|
|
|
const freezeShoppingList = `-- name: FreezeShoppingList :execrows
|
|
UPDATE shopping_lists
|
|
SET status = 'archived', frozen_at = ?, updated_at = ?
|
|
WHERE id = ? AND frozen_at IS NULL
|
|
`
|
|
|
|
type FreezeShoppingListParams struct {
|
|
FrozenAt sql.NullString
|
|
UpdatedAt string
|
|
ID string
|
|
}
|
|
|
|
// Freezes list id into the Supply archive at frozen_at, unless it is
|
|
// frozen already.
|
|
func (q *Queries) FreezeShoppingList(ctx context.Context, arg FreezeShoppingListParams) (int64, error) {
|
|
result, err := q.db.ExecContext(ctx, freezeShoppingList, arg.FrozenAt, arg.UpdatedAt, arg.ID)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return result.RowsAffected()
|
|
}
|
|
|
|
const getShoppingItemList = `-- name: GetShoppingItemList :one
|
|
SELECT shopping_lists.id, shopping_lists.week_start, shopping_lists.plan_id, shopping_lists.title, shopping_lists.status, shopping_lists.sent_to_chat_at, shopping_lists.frozen_at, shopping_lists.created_at, shopping_lists.updated_at, shopping_lists.chat_send_unconfirmed_at
|
|
FROM shopping_items
|
|
JOIN shopping_groups ON shopping_groups.id = shopping_items.group_id
|
|
JOIN shopping_lists ON shopping_lists.id = shopping_groups.list_id
|
|
WHERE shopping_items.id = ?
|
|
`
|
|
|
|
type GetShoppingItemListRow struct {
|
|
ShoppingList ShoppingList
|
|
}
|
|
|
|
// The Supply run holding item id. Returns sql.ErrNoRows when there is no
|
|
// such item.
|
|
func (q *Queries) GetShoppingItemList(ctx context.Context, id string) (GetShoppingItemListRow, error) {
|
|
row := q.db.QueryRowContext(ctx, getShoppingItemList, id)
|
|
var i GetShoppingItemListRow
|
|
err := row.Scan(
|
|
&i.ShoppingList.ID,
|
|
&i.ShoppingList.WeekStart,
|
|
&i.ShoppingList.PlanID,
|
|
&i.ShoppingList.Title,
|
|
&i.ShoppingList.Status,
|
|
&i.ShoppingList.SentToChatAt,
|
|
&i.ShoppingList.FrozenAt,
|
|
&i.ShoppingList.CreatedAt,
|
|
&i.ShoppingList.UpdatedAt,
|
|
&i.ShoppingList.ChatSendUnconfirmedAt,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const getShoppingList = `-- name: GetShoppingList :one
|
|
SELECT id, week_start, plan_id, title, status, sent_to_chat_at, frozen_at, created_at, updated_at, chat_send_unconfirmed_at FROM shopping_lists
|
|
WHERE week_start = ?
|
|
`
|
|
|
|
// The Supply run of the week starting week_start. Returns sql.ErrNoRows
|
|
// when there is none.
|
|
func (q *Queries) GetShoppingList(ctx context.Context, weekStart string) (ShoppingList, error) {
|
|
row := q.db.QueryRowContext(ctx, getShoppingList, weekStart)
|
|
var i ShoppingList
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.WeekStart,
|
|
&i.PlanID,
|
|
&i.Title,
|
|
&i.Status,
|
|
&i.SentToChatAt,
|
|
&i.FrozenAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
&i.ChatSendUnconfirmedAt,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const listShoppingGroupDinners = `-- name: ListShoppingGroupDinners :many
|
|
SELECT shopping_groups.id, shopping_groups.list_id, shopping_groups.dinner_id, shopping_groups.date, shopping_groups.position, shopping_groups.created_at, shopping_groups.updated_at, dinners.name AS dinner_name
|
|
FROM shopping_groups
|
|
JOIN dinners ON dinners.id = shopping_groups.dinner_id
|
|
WHERE shopping_groups.list_id = ?
|
|
ORDER BY shopping_groups.position, shopping_groups.id
|
|
`
|
|
|
|
type ListShoppingGroupDinnersRow struct {
|
|
ShoppingGroup ShoppingGroup
|
|
DinnerName string
|
|
}
|
|
|
|
// The groups of list list_id with their dinner's name, in list order.
|
|
func (q *Queries) ListShoppingGroupDinners(ctx context.Context, listID string) ([]ListShoppingGroupDinnersRow, error) {
|
|
rows, err := q.db.QueryContext(ctx, listShoppingGroupDinners, listID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []ListShoppingGroupDinnersRow
|
|
for rows.Next() {
|
|
var i ListShoppingGroupDinnersRow
|
|
if err := rows.Scan(
|
|
&i.ShoppingGroup.ID,
|
|
&i.ShoppingGroup.ListID,
|
|
&i.ShoppingGroup.DinnerID,
|
|
&i.ShoppingGroup.Date,
|
|
&i.ShoppingGroup.Position,
|
|
&i.ShoppingGroup.CreatedAt,
|
|
&i.ShoppingGroup.UpdatedAt,
|
|
&i.DinnerName,
|
|
); 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 listShoppingGroups = `-- name: ListShoppingGroups :many
|
|
SELECT id, list_id, dinner_id, date, position, created_at, updated_at FROM shopping_groups
|
|
WHERE list_id = ?
|
|
ORDER BY position, id
|
|
`
|
|
|
|
// The groups of list list_id, in list order.
|
|
func (q *Queries) ListShoppingGroups(ctx context.Context, listID string) ([]ShoppingGroup, error) {
|
|
rows, err := q.db.QueryContext(ctx, listShoppingGroups, listID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []ShoppingGroup
|
|
for rows.Next() {
|
|
var i ShoppingGroup
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.ListID,
|
|
&i.DinnerID,
|
|
&i.Date,
|
|
&i.Position,
|
|
&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 listShoppingItems = `-- name: ListShoppingItems :many
|
|
SELECT shopping_items.id, shopping_items.group_id, shopping_items.name, shopping_items.qty, shopping_items.needed, shopping_items.position, shopping_items.created_at, shopping_items.updated_at, shopping_groups.dinner_id
|
|
FROM shopping_items
|
|
JOIN shopping_groups ON shopping_groups.id = shopping_items.group_id
|
|
WHERE shopping_groups.list_id = ?
|
|
ORDER BY shopping_groups.position, shopping_items.position, shopping_items.id
|
|
`
|
|
|
|
type ListShoppingItemsRow struct {
|
|
ShoppingItem ShoppingItem
|
|
DinnerID string
|
|
}
|
|
|
|
// The items of list list_id with their group's dinner, in list order: by
|
|
// group, then by item.
|
|
func (q *Queries) ListShoppingItems(ctx context.Context, listID string) ([]ListShoppingItemsRow, error) {
|
|
rows, err := q.db.QueryContext(ctx, listShoppingItems, listID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []ListShoppingItemsRow
|
|
for rows.Next() {
|
|
var i ListShoppingItemsRow
|
|
if err := rows.Scan(
|
|
&i.ShoppingItem.ID,
|
|
&i.ShoppingItem.GroupID,
|
|
&i.ShoppingItem.Name,
|
|
&i.ShoppingItem.Qty,
|
|
&i.ShoppingItem.Needed,
|
|
&i.ShoppingItem.Position,
|
|
&i.ShoppingItem.CreatedAt,
|
|
&i.ShoppingItem.UpdatedAt,
|
|
&i.DinnerID,
|
|
); 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 listShoppingListsThrough = `-- name: ListShoppingListsThrough :many
|
|
SELECT id, week_start, plan_id, title, status, sent_to_chat_at, frozen_at, created_at, updated_at, chat_send_unconfirmed_at FROM shopping_lists
|
|
WHERE week_start <= ?
|
|
ORDER BY week_start DESC
|
|
`
|
|
|
|
// The Supply runs of the weeks starting on or before week_start, newest
|
|
// week first.
|
|
func (q *Queries) ListShoppingListsThrough(ctx context.Context, weekStart string) ([]ShoppingList, error) {
|
|
rows, err := q.db.QueryContext(ctx, listShoppingListsThrough, weekStart)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []ShoppingList
|
|
for rows.Next() {
|
|
var i ShoppingList
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.WeekStart,
|
|
&i.PlanID,
|
|
&i.Title,
|
|
&i.Status,
|
|
&i.SentToChatAt,
|
|
&i.FrozenAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
&i.ChatSendUnconfirmedAt,
|
|
); 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 markShoppingListSentToChat = `-- name: MarkShoppingListSentToChat :execrows
|
|
UPDATE shopping_lists
|
|
SET sent_to_chat_at = ?, chat_send_unconfirmed_at = NULL, updated_at = ?
|
|
WHERE id = ? AND status = 'current' AND frozen_at IS NULL
|
|
`
|
|
|
|
type MarkShoppingListSentToChatParams struct {
|
|
SentToChatAt sql.NullString
|
|
UpdatedAt string
|
|
ID string
|
|
}
|
|
|
|
// Records list id sent to Google Chat at sent_to_chat_at, its send
|
|
// confirmed, unless it is frozen into the Supply archive.
|
|
func (q *Queries) MarkShoppingListSentToChat(ctx context.Context, arg MarkShoppingListSentToChatParams) (int64, error) {
|
|
result, err := q.db.ExecContext(ctx, markShoppingListSentToChat, arg.SentToChatAt, arg.UpdatedAt, arg.ID)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return result.RowsAffected()
|
|
}
|
|
|
|
const moveShoppingGroup = `-- name: MoveShoppingGroup :exec
|
|
UPDATE shopping_groups
|
|
SET position = ?, updated_at = ?
|
|
WHERE id = ?
|
|
`
|
|
|
|
type MoveShoppingGroupParams struct {
|
|
Position int64
|
|
UpdatedAt string
|
|
ID string
|
|
}
|
|
|
|
func (q *Queries) MoveShoppingGroup(ctx context.Context, arg MoveShoppingGroupParams) error {
|
|
_, err := q.db.ExecContext(ctx, moveShoppingGroup, arg.Position, arg.UpdatedAt, arg.ID)
|
|
return err
|
|
}
|
|
|
|
const moveShoppingItem = `-- name: MoveShoppingItem :exec
|
|
UPDATE shopping_items
|
|
SET group_id = ?, qty = ?, position = ?, updated_at = ?
|
|
WHERE id = ?
|
|
`
|
|
|
|
type MoveShoppingItemParams struct {
|
|
GroupID string
|
|
Qty sql.NullString
|
|
Position int64
|
|
UpdatedAt string
|
|
ID string
|
|
}
|
|
|
|
// Places item id in group group_id at position with quantity qty; its
|
|
// name and needed flag are kept.
|
|
func (q *Queries) MoveShoppingItem(ctx context.Context, arg MoveShoppingItemParams) error {
|
|
_, err := q.db.ExecContext(ctx, moveShoppingItem,
|
|
arg.GroupID,
|
|
arg.Qty,
|
|
arg.Position,
|
|
arg.UpdatedAt,
|
|
arg.ID,
|
|
)
|
|
return err
|
|
}
|
|
|
|
const regenerateShoppingList = `-- name: RegenerateShoppingList :exec
|
|
UPDATE shopping_lists
|
|
SET plan_id = ?, updated_at = ?
|
|
WHERE id = ?
|
|
`
|
|
|
|
type RegenerateShoppingListParams struct {
|
|
PlanID string
|
|
UpdatedAt string
|
|
ID string
|
|
}
|
|
|
|
// Records a generation of list id from plan plan_id.
|
|
func (q *Queries) RegenerateShoppingList(ctx context.Context, arg RegenerateShoppingListParams) error {
|
|
_, err := q.db.ExecContext(ctx, regenerateShoppingList, arg.PlanID, arg.UpdatedAt, arg.ID)
|
|
return err
|
|
}
|
|
|
|
const setShoppingItemNeeded = `-- name: SetShoppingItemNeeded :exec
|
|
UPDATE shopping_items
|
|
SET needed = ?, updated_at = ?
|
|
WHERE id = ?
|
|
`
|
|
|
|
type SetShoppingItemNeededParams struct {
|
|
Needed int64
|
|
UpdatedAt string
|
|
ID string
|
|
}
|
|
|
|
// Marks item id needed (1) or "have it" (0).
|
|
func (q *Queries) SetShoppingItemNeeded(ctx context.Context, arg SetShoppingItemNeededParams) error {
|
|
_, err := q.db.ExecContext(ctx, setShoppingItemNeeded, arg.Needed, arg.UpdatedAt, arg.ID)
|
|
return err
|
|
}
|
|
|
|
const setShoppingListTitle = `-- name: SetShoppingListTitle :execrows
|
|
UPDATE shopping_lists
|
|
SET title = ?, updated_at = ?
|
|
WHERE id = ? AND title IS NULL AND status = 'current' AND frozen_at IS NULL
|
|
`
|
|
|
|
type SetShoppingListTitleParams struct {
|
|
Title sql.NullString
|
|
UpdatedAt string
|
|
ID string
|
|
}
|
|
|
|
// Titles list id, unless it has a title already or is frozen into the
|
|
// Supply archive.
|
|
func (q *Queries) SetShoppingListTitle(ctx context.Context, arg SetShoppingListTitleParams) (int64, error) {
|
|
result, err := q.db.ExecContext(ctx, setShoppingListTitle, arg.Title, arg.UpdatedAt, arg.ID)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return result.RowsAffected()
|
|
}
|