165 lines
5.3 KiB
SQL
165 lines
5.3 KiB
SQL
-- name: GetHouseholdSettings :one
|
|
-- Returns sql.ErrNoRows until the row exists.
|
|
SELECT * FROM household_settings
|
|
WHERE id = 1;
|
|
|
|
-- name: UpsertHouseholdSettings :one
|
|
-- Creates the single row (id 1) or replaces every column except id and
|
|
-- created_at.
|
|
INSERT INTO household_settings (
|
|
id, timezone, dinner_time, reminder_time, review_time, plan_draft_dow,
|
|
plan_draft_time, suggestions_dow, suggestions_time, chat_autosend_dow,
|
|
chat_autosend_time, onboarding_completed_at, updates_seen_at,
|
|
updated_by, created_at, updated_at
|
|
) VALUES (
|
|
1, ?, ?, ?, ?, ?,
|
|
?, ?, ?, ?,
|
|
?, ?, ?,
|
|
?, ?, ?
|
|
)
|
|
ON CONFLICT (id) DO UPDATE SET
|
|
timezone = excluded.timezone,
|
|
dinner_time = excluded.dinner_time,
|
|
reminder_time = excluded.reminder_time,
|
|
review_time = excluded.review_time,
|
|
plan_draft_dow = excluded.plan_draft_dow,
|
|
plan_draft_time = excluded.plan_draft_time,
|
|
suggestions_dow = excluded.suggestions_dow,
|
|
suggestions_time = excluded.suggestions_time,
|
|
chat_autosend_dow = excluded.chat_autosend_dow,
|
|
chat_autosend_time = excluded.chat_autosend_time,
|
|
onboarding_completed_at = excluded.onboarding_completed_at,
|
|
updates_seen_at = excluded.updates_seen_at,
|
|
updated_by = excluded.updated_by,
|
|
updated_at = excluded.updated_at
|
|
RETURNING *;
|
|
|
|
-- name: GetAISettings :one
|
|
-- Returns sql.ErrNoRows until the row exists.
|
|
SELECT * FROM ai_settings
|
|
WHERE id = 1;
|
|
|
|
-- name: UpsertAISettings :one
|
|
-- Creates the single row (id 1) or replaces every column except id and
|
|
-- created_at.
|
|
INSERT INTO ai_settings (
|
|
id, provider, base_url, model, temperature, system_prompt, api_key_ct,
|
|
api_key_last4, key_verified_at, created_at, updated_at
|
|
) VALUES (
|
|
1, ?, ?, ?, ?, ?, ?,
|
|
?, ?, ?, ?
|
|
)
|
|
ON CONFLICT (id) DO UPDATE SET
|
|
provider = excluded.provider,
|
|
base_url = excluded.base_url,
|
|
model = excluded.model,
|
|
temperature = excluded.temperature,
|
|
system_prompt = excluded.system_prompt,
|
|
api_key_ct = excluded.api_key_ct,
|
|
api_key_last4 = excluded.api_key_last4,
|
|
key_verified_at = excluded.key_verified_at,
|
|
updated_at = excluded.updated_at
|
|
RETURNING *;
|
|
|
|
-- name: GetRecipeSearchSettings :one
|
|
-- Returns sql.ErrNoRows until the row exists.
|
|
SELECT * FROM recipe_search_settings
|
|
WHERE id = 1;
|
|
|
|
-- name: UpsertRecipeSearchSettings :one
|
|
-- Creates the single row (id 1) or replaces every column except id and
|
|
-- created_at.
|
|
INSERT INTO recipe_search_settings (
|
|
id, provider, base_url, api_key_ct, api_key_last4, created_at, updated_at
|
|
) VALUES (
|
|
1, ?, ?, ?, ?, ?, ?
|
|
)
|
|
ON CONFLICT (id) DO UPDATE SET
|
|
provider = excluded.provider,
|
|
base_url = excluded.base_url,
|
|
api_key_ct = excluded.api_key_ct,
|
|
api_key_last4 = excluded.api_key_last4,
|
|
updated_at = excluded.updated_at
|
|
RETURNING *;
|
|
|
|
-- name: GetIntegrationsGoogle :one
|
|
-- Returns sql.ErrNoRows until the row exists.
|
|
SELECT * FROM integrations_google
|
|
WHERE id = 1;
|
|
|
|
-- name: UpsertIntegrationsGoogle :one
|
|
-- Creates the single row (id 1) or replaces every column except id and
|
|
-- created_at.
|
|
INSERT INTO integrations_google (
|
|
id, refresh_token_ct, calendar_id, calendar_name, connected_at,
|
|
last_sync_error, created_at, updated_at
|
|
) VALUES (
|
|
1, ?, ?, ?, ?,
|
|
?, ?, ?
|
|
)
|
|
ON CONFLICT (id) DO UPDATE SET
|
|
refresh_token_ct = excluded.refresh_token_ct,
|
|
calendar_id = excluded.calendar_id,
|
|
calendar_name = excluded.calendar_name,
|
|
connected_at = excluded.connected_at,
|
|
last_sync_error = excluded.last_sync_error,
|
|
updated_at = excluded.updated_at
|
|
RETURNING *;
|
|
|
|
-- name: SetIntegrationsGoogleCalendar :execrows
|
|
-- Sets the chosen calendar; affects no row when nothing is connected.
|
|
UPDATE integrations_google
|
|
SET calendar_id = ?, calendar_name = ?, updated_at = ?
|
|
WHERE id = 1;
|
|
|
|
-- name: ClearIntegrationsGoogleToken :execrows
|
|
-- Records that Google refuses the stored grant: clears the refresh token and
|
|
-- sets last_sync_error, keeping the chosen calendar. Affects no row when
|
|
-- nothing is connected.
|
|
UPDATE integrations_google
|
|
SET refresh_token_ct = NULL, last_sync_error = ?, updated_at = ?
|
|
WHERE id = 1;
|
|
|
|
-- name: DeleteIntegrationsGoogle :exec
|
|
DELETE FROM integrations_google
|
|
WHERE id = 1;
|
|
|
|
-- name: GetChatSettings :one
|
|
-- Returns sql.ErrNoRows until the row exists.
|
|
SELECT * FROM chat_settings
|
|
WHERE id = 1;
|
|
|
|
-- name: UpsertChatSettings :one
|
|
-- Creates the single row (id 1) or replaces every column except id and
|
|
-- created_at.
|
|
INSERT INTO chat_settings (
|
|
id, webhook_url_ct, space_label, last_test_at, last_test_status,
|
|
created_at, updated_at
|
|
) VALUES (
|
|
1, ?, ?, ?, ?,
|
|
?, ?
|
|
)
|
|
ON CONFLICT (id) DO UPDATE SET
|
|
webhook_url_ct = excluded.webhook_url_ct,
|
|
space_label = excluded.space_label,
|
|
last_test_at = excluded.last_test_at,
|
|
last_test_status = excluded.last_test_status,
|
|
updated_at = excluded.updated_at
|
|
RETURNING *;
|
|
|
|
-- name: RecordChatTest :execrows
|
|
-- Records the outcome of a test message sent to the webhook sealed in
|
|
-- webhook_url_ct; affects no row when the webhook has been replaced or
|
|
-- removed since the test began.
|
|
UPDATE chat_settings
|
|
SET last_test_at = ?, last_test_status = ?, updated_at = ?
|
|
WHERE id = 1 AND webhook_url_ct = ?;
|
|
|
|
-- name: MarkUpdatesSeen :execrows
|
|
-- Moves updates_seen_at forward to seen_at; affects no row when it is
|
|
-- already at or after seen_at, so it never moves back. It is not a settings
|
|
-- edit: updated_by and updated_at are left as they are.
|
|
UPDATE household_settings
|
|
SET updates_seen_at = CAST(sqlc.arg(seen_at) AS TEXT)
|
|
WHERE id = 1 AND (updates_seen_at IS NULL OR updates_seen_at < CAST(sqlc.arg(seen_at) AS TEXT));
|