added functionality to log diaper changes

This commit is contained in:
Brian Bjarke Jensen
2025-11-10 15:56:08 +01:00
parent 0853ff0ff4
commit 788b473c23
11 changed files with 926 additions and 0 deletions
@@ -0,0 +1,30 @@
"""Diaper change database model."""
from typing import TYPE_CHECKING
from sqlalchemy import Column, Integer, DateTime, ForeignKey, String
from datetime import datetime, UTC
if TYPE_CHECKING:
from sqlalchemy.orm import DeclarativeBase
Base = DeclarativeBase
else:
from baby_monitor.repositories.dependencies.get_database import Base
class DiaperChange(Base):
"""Diaper change log database model."""
__tablename__ = "diaper_changes"
id = Column(Integer, primary_key=True, index=True)
child_id = Column(Integer, ForeignKey("children.id"), nullable=False)
change_time = Column(DateTime, nullable=False)
poop_amount = Column(String, nullable=True) # stores PoopAmount enum
poop_color = Column(String, nullable=True) # stores PoopColor enum
pee_amount = Column(String, nullable=True) # stores PeeAmount enum
pee_color = Column(String, nullable=True) # stores PeeColor enum
created_at = Column(DateTime, default=datetime.now(UTC), nullable=False)
def __repr__(self) -> str:
return f"<DiaperChange(id={self.id}, child_id={self.child_id})>"
+46
View File
@@ -0,0 +1,46 @@
"""Diaper change-related request and response models."""
from datetime import datetime
from pydantic import BaseModel, Field
from baby_monitor.models.enums import (
PeeAmount,
PeeColor,
PoopAmount,
PoopColor,
)
class CreateDiaperChangeRequest(BaseModel):
"""Request model for creating a diaper change log."""
child_id: int = Field(..., gt=0)
change_time: datetime
poop_amount: PoopAmount | None = None
poop_color: PoopColor | None = None
pee_amount: PeeAmount | None = None
pee_color: PeeColor | None = None
class UpdateDiaperChangeRequest(BaseModel):
"""Request model for updating a diaper change log."""
change_time: datetime | None = None
poop_amount: PoopAmount | None = None
poop_color: PoopColor | None = None
pee_amount: PeeAmount | None = None
pee_color: PeeColor | None = None
class DiaperChangeResponse(BaseModel):
"""Response model for diaper change log data."""
id: int
child_id: int
change_time: datetime
poop_amount: str | None
poop_color: str | None
pee_amount: str | None
pee_color: str | None
created_at: datetime
child_name: str | None = None # Optional, populated when needed
+33
View File
@@ -9,3 +9,36 @@ class FeedingType(StrEnum):
LEFT_BREAST = "left_breast"
RIGHT_BREAST = "right_breast"
BOTTLE = "bottle"
class PoopAmount(StrEnum):
"""Enumeration of poop amounts."""
LIGHT = "light"
MEDIUM = "medium"
HEAVY = "heavy"
class PoopColor(StrEnum):
"""Enumeration of poop colors."""
BLACK = "black"
YELLOW = "yellow"
GREEN = "green"
BROWN = "brown"
class PeeAmount(StrEnum):
"""Enumeration of pee amounts."""
LIGHT = "light"
MEDIUM = "medium"
HEAVY = "heavy"
class PeeColor(StrEnum):
"""Enumeration of pee colors."""
CLEAR = "clear"
YELLOW = "yellow"
RED = "red"