2025-05-30 20:35:55 +00:00

52 lines
1.4 KiB
Python

"""
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