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"` // from dishes or products JOIN Portions float64 `json:"portions"` Calories *float64 `json:"calories,omitempty"` // recipe.calories_per_serving * portions, or product * portion_g ProteinG *float64 `json:"protein_g,omitempty"` FatG *float64 `json:"fat_g,omitempty"` CarbsG *float64 `json:"carbs_g,omitempty"` Source string `json:"source"` DishID *string `json:"dish_id,omitempty"` ProductID *string `json:"product_id,omitempty"` RecipeID *string `json:"recipe_id,omitempty"` PortionG *float64 `json:"portion_g,omitempty"` JobID *string `json:"job_id,omitempty"` CreatedAt time.Time `json:"created_at"` } // RecentDiaryItem is a lightweight summary of a recently logged product or dish. type RecentDiaryItem struct { ItemType string `json:"item_type"` // "dish" | "product" DishID *string `json:"dish_id,omitempty"` ProductID *string `json:"product_id,omitempty"` Name string `json:"name"` ImageURL *string `json:"image_url,omitempty"` CategoryName *string `json:"category_name,omitempty"` CaloriesPer100g *float64 `json:"calories_per_100g,omitempty"` CaloriesPerServing *float64 `json:"calories_per_serving,omitempty"` } // CreateRequest is the body for POST /diary. type CreateRequest struct { Date string `json:"date"` MealType string `json:"meal_type"` Name string `json:"name"` // input-only; used if DishID is nil and ProductID is nil Portions float64 `json:"portions"` Source string `json:"source"` DishID *string `json:"dish_id"` ProductID *string `json:"product_id"` RecipeID *string `json:"recipe_id"` PortionG *float64 `json:"portion_g"` JobID *string `json:"job_id"` }