MQ-167-01: a scheduled or manual batch now emits new_suggestions:{batchId}
in the transaction that first stores its Side quests, so the cards and
their notification commit together. A later round that fails, or a
failure recording the batch's end, no longer loses the event; a later
round's emit is a no-op by key; a notification that cannot be stored
fails that store, leaving no unannounced cards. Replenish batches still
never notify. finishBatch goes back to recording status only.
MQ-167-02: migration 0017 adds shopping_lists.chat_send_unconfirmed_at.
SendToChat records the send as begun before posting, clears it with
sent_to_chat_at once Google Chat accepts, and clears it alone when Chat
refuses. A post Chat does not answer, or one it accepts that cannot be
recorded, is ErrSendUnconfirmed (502 chat_unconfirmed, not retryable)
and leaves the marker, as does a crash mid-send; a repeat without resend
never reposts, and resend posts again. The Supply run screen re-reads
the list after a failed send, shows an unconfirmed send, offers no Retry
for it, and sends again only with resend.
Task: f0cd9d50-9c11-41be-a945-7bae9f5f28a4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
324 lines
6.5 KiB
Go
324 lines
6.5 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.31.1
|
|
|
|
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
)
|
|
|
|
type AiRun struct {
|
|
ID string
|
|
Skill string
|
|
SkillVersion string
|
|
Provider string
|
|
Model string
|
|
Temperature float64
|
|
Status string
|
|
LatencyMs sql.NullInt64
|
|
TokensIn sql.NullInt64
|
|
TokensOut sql.NullInt64
|
|
Error sql.NullString
|
|
RequestRedacted string
|
|
ResponseRedacted sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type AiSetting struct {
|
|
ID int64
|
|
Provider string
|
|
BaseUrl string
|
|
Model string
|
|
Temperature float64
|
|
SystemPrompt sql.NullString
|
|
ApiKeyCt []byte
|
|
ApiKeyLast4 sql.NullString
|
|
KeyVerifiedAt sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type ChatSetting struct {
|
|
ID int64
|
|
WebhookUrlCt []byte
|
|
SpaceLabel sql.NullString
|
|
LastTestAt sql.NullString
|
|
LastTestStatus sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type Dinner struct {
|
|
ID string
|
|
Name string
|
|
NormalizedName string
|
|
Status string
|
|
Origin string
|
|
Method sql.NullString
|
|
MinutesTotal sql.NullInt64
|
|
Difficulty sql.NullString
|
|
Cuisine sql.NullString
|
|
IsFavorite int64
|
|
RecipeID sql.NullString
|
|
PhotoID sql.NullString
|
|
GroundingStatus string
|
|
UpdatedBy sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
RecipeUrl sql.NullString
|
|
GroundingError sql.NullString
|
|
GroundingRevision int64
|
|
}
|
|
|
|
type HouseholdSetting struct {
|
|
ID int64
|
|
Timezone string
|
|
DinnerTime string
|
|
ReminderTime string
|
|
ReviewTime string
|
|
PlanDraftDow int64
|
|
PlanDraftTime string
|
|
SuggestionsDow int64
|
|
SuggestionsTime string
|
|
ChatAutosendDow int64
|
|
ChatAutosendTime string
|
|
OnboardingCompletedAt sql.NullString
|
|
UpdatesSeenAt sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
UpdatedBy sql.NullString
|
|
}
|
|
|
|
type IntegrationsGoogle struct {
|
|
ID int64
|
|
RefreshTokenCt []byte
|
|
CalendarID sql.NullString
|
|
CalendarName sql.NullString
|
|
ConnectedAt string
|
|
LastSyncError sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type Job struct {
|
|
ID string
|
|
Kind string
|
|
Status string
|
|
Payload string
|
|
Result sql.NullString
|
|
Error sql.NullString
|
|
StartedAt sql.NullString
|
|
FinishedAt sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type NotificationOutbox struct {
|
|
ID string
|
|
EventKey string
|
|
Channel string
|
|
Payload string
|
|
Status string
|
|
Attempts int64
|
|
NextAttemptAt sql.NullString
|
|
LastError sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type NotificationPref struct {
|
|
Event string
|
|
Push int64
|
|
Chat int64
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type Photo struct {
|
|
ID string
|
|
SourceUrl string
|
|
LocalPath string
|
|
Width int64
|
|
Height int64
|
|
Sha256 string
|
|
FetchedAt string
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type PlanDay struct {
|
|
ID string
|
|
PlanID string
|
|
Date string
|
|
DinnerID sql.NullString
|
|
IsNew int64
|
|
CalendarEventID sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type PushSubscription struct {
|
|
ID string
|
|
Endpoint string
|
|
P256dh string
|
|
Auth string
|
|
UserAgent sql.NullString
|
|
FailureCount int64
|
|
LastSuccessAt sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type Recipe 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
|
|
PhotoID sql.NullString
|
|
Method sql.NullString
|
|
Difficulty sql.NullString
|
|
MinutesTotal sql.NullInt64
|
|
}
|
|
|
|
type RecipeIngredient 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
|
|
}
|
|
|
|
type RecipeSearchSetting struct {
|
|
ID int64
|
|
Provider string
|
|
BaseUrl sql.NullString
|
|
ApiKeyCt []byte
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
ApiKeyLast4 sql.NullString
|
|
}
|
|
|
|
type RecipeStep struct {
|
|
ID string
|
|
RecipeID string
|
|
Position int64
|
|
Text string
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type RotationReview struct {
|
|
ID string
|
|
DinnerID string
|
|
PlanDate string
|
|
Status string
|
|
Decision sql.NullString
|
|
Name sql.NullString
|
|
DecidedAt sql.NullString
|
|
UpdatedBy sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type ScheduleRun struct {
|
|
ID string
|
|
Schedule string
|
|
PeriodKey string
|
|
CreatedAt string
|
|
}
|
|
|
|
type Session struct {
|
|
IDHash string
|
|
Subject string
|
|
Email string
|
|
Name string
|
|
Groups string
|
|
CsrfToken string
|
|
CreatedAt string
|
|
LastSeenAt string
|
|
ExpiresAt string
|
|
}
|
|
|
|
type ShoppingGroup struct {
|
|
ID string
|
|
ListID string
|
|
DinnerID string
|
|
Date string
|
|
Position int64
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type ShoppingItem struct {
|
|
ID string
|
|
GroupID string
|
|
Name string
|
|
Qty sql.NullString
|
|
Needed int64
|
|
Position int64
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type ShoppingList struct {
|
|
ID string
|
|
WeekStart string
|
|
PlanID string
|
|
Title sql.NullString
|
|
Status string
|
|
SentToChatAt sql.NullString
|
|
FrozenAt sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
ChatSendUnconfirmedAt sql.NullString
|
|
}
|
|
|
|
type Suggestion struct {
|
|
ID string
|
|
DinnerID string
|
|
BatchID string
|
|
Name string
|
|
Reason string
|
|
CitedRegularIds string
|
|
Status string
|
|
DecidedAt sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type SuggestionBatch struct {
|
|
ID string
|
|
Trigger string
|
|
Status string
|
|
AiRunID sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
}
|
|
|
|
type WeekPlan struct {
|
|
ID string
|
|
WeekStart string
|
|
Status string
|
|
AiNote sql.NullString
|
|
AiRunID sql.NullString
|
|
CalendarSyncedAt sql.NullString
|
|
CreatedAt string
|
|
UpdatedAt string
|
|
Revision int64
|
|
}
|