52 lines
1.4 KiB
Python
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 |