""" CalorieEntry schemas for the application """ from datetime import datetime from typing import Optional from pydantic import Field from app.schemas.base import BaseSchema, TimestampSchema from app.schemas.food import Food # Shared properties class CalorieEntryBase(BaseSchema): """Base calorie entry schema with shared properties""" food_id: Optional[int] = None quantity_g: Optional[float] = None meal_type: Optional[str] = None notes: Optional[str] = None consumed_at: Optional[datetime] = None # Properties to receive via API on creation class CalorieEntryCreate(CalorieEntryBase): """Schema for creating a new calorie entry""" food_id: int quantity_g: float = Field(..., gt=0) consumed_at: Optional[datetime] = datetime.utcnow() # Properties to receive via API on update class CalorieEntryUpdate(CalorieEntryBase): """Schema for updating a calorie entry""" pass class CalorieEntryInDBBase(CalorieEntryBase, TimestampSchema): """Base schema for calorie entry in database""" id: int user_id: int # Additional properties to return via API class CalorieEntry(CalorieEntryInDBBase): """Schema for returning a calorie entry via API""" pass # Expanded calorie entry with food details class CalorieEntryWithFood(CalorieEntry): """Schema for returning a calorie entry with food details""" food: Food calories: float # Calculated total calories for this entry