Backend: - Migrations 007 (menu_plans, menu_items, shopping_lists) and 008 (meal_diary) - gemini/menu.go: GenerateMenu — 7-day × 3-meal plan via one Groq call - internal/menu: model, repository (GetByWeek, SaveMenuInTx, shopping list CRUD), handler (GET/PUT/DELETE /menu, POST /ai/generate-menu, shopping list endpoints) - internal/diary: model, repository, handler (GET/POST/DELETE /diary) - Increase server WriteTimeout to 120s for long AI calls - api_client.go: add patch() and postList() helpers Flutter: - shared/models: menu.dart, shopping_item.dart, diary_entry.dart - features/menu: menu_service.dart, menu_provider.dart (MenuNotifier, ShoppingListNotifier, DiaryNotifier with family) - MenuScreen: 7-day view, week nav, skeleton on generation, generate FAB with confirmation dialog - ShoppingListScreen: items by category, optimistic checkbox toggle - DiaryScreen: daily entries with swipe-to-delete, add-entry sheet - Router: /menu/shopping-list and /menu/diary routes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
34 lines
1.0 KiB
Go
34 lines
1.0 KiB
Go
package diary
|
|
|
|
import "time"
|
|
|
|
// Entry is a single meal diary record.
|
|
type Entry struct {
|
|
ID string `json:"id"`
|
|
Date string `json:"date"` // YYYY-MM-DD
|
|
MealType string `json:"meal_type"`
|
|
Name string `json:"name"`
|
|
Portions float64 `json:"portions"`
|
|
Calories *float64 `json:"calories,omitempty"`
|
|
ProteinG *float64 `json:"protein_g,omitempty"`
|
|
FatG *float64 `json:"fat_g,omitempty"`
|
|
CarbsG *float64 `json:"carbs_g,omitempty"`
|
|
Source string `json:"source"`
|
|
RecipeID *string `json:"recipe_id,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// CreateRequest is the body for POST /diary.
|
|
type CreateRequest struct {
|
|
Date string `json:"date"`
|
|
MealType string `json:"meal_type"`
|
|
Name string `json:"name"`
|
|
Portions float64 `json:"portions"`
|
|
Calories *float64 `json:"calories"`
|
|
ProteinG *float64 `json:"protein_g"`
|
|
FatG *float64 `json:"fat_g"`
|
|
CarbsG *float64 `json:"carbs_g"`
|
|
Source string `json:"source"`
|
|
RecipeID *string `json:"recipe_id"`
|
|
}
|