fix: increase connectTimeout and replace expires_at stored column refs

- api_client.dart: connectTimeout 10s → 60s — Flutter was cancelling
  requests to /recommendations after 10s while the server waited for
  OpenAI, causing 'context canceled' on the server side
- product/repository.go ListForPrompt: expires_at is computed via
  (added_at + storage_days * INTERVAL '1 day'), not a stored column;
  wrap in CTE to reference it by alias in SELECT/ORDER BY
- home/handler.go getExpiringSoon: same fix — use CTE to compute
  expires_at before filtering/ordering by it

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
dbastrikin
2026-02-22 15:30:40 +02:00
parent 9530dc6ff9
commit 3d900df15b
3 changed files with 16 additions and 7 deletions

View File

@@ -150,12 +150,16 @@ func defaultPlan() []MealPlan {
// getExpiringSoon returns products expiring within the next 3 days.
func (h *Handler) getExpiringSoon(ctx context.Context, userID string) []ExpiringSoon {
rows, err := h.pool.Query(ctx, `
WITH p AS (
SELECT name, quantity, unit,
(added_at + storage_days * INTERVAL '1 day') AS expires_at
FROM products
WHERE user_id = $1
)
SELECT name, quantity, unit,
GREATEST(0, EXTRACT(EPOCH FROM (expires_at - now())) / 86400)::int
FROM products
WHERE user_id = $1
AND expires_at IS NOT NULL
AND expires_at > now()
FROM p
WHERE expires_at > now()
AND expires_at <= now() + INTERVAL '3 days'
ORDER BY expires_at
LIMIT 5`,

View File

@@ -117,9 +117,14 @@ func (r *Repository) Delete(ctx context.Context, id, userID string) error {
// Expiring soon items are marked with ⚠.
func (r *Repository) ListForPrompt(ctx context.Context, userID string) ([]string, error) {
rows, err := r.pool.Query(ctx, `
WITH p AS (
SELECT name, quantity, unit,
(added_at + storage_days * INTERVAL '1 day') AS expires_at
FROM products
WHERE user_id = $1
)
SELECT name, quantity, unit, expires_at
FROM products
WHERE user_id = $1
FROM p
ORDER BY expires_at ASC`, userID)
if err != nil {
return nil, fmt.Errorf("list products for prompt: %w", err)