67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
"""Schemas for Chore Completion Logs."""
|
|
from pydantic import BaseModel, Field
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
|
|
class ChoreCompletionLogBase(BaseModel):
|
|
"""Base schema for chore completion log."""
|
|
notes: Optional[str] = Field(None, description="Optional notes about the completion")
|
|
|
|
|
|
class ChoreCompletionLogCreate(ChoreCompletionLogBase):
|
|
"""Schema for creating a chore completion log."""
|
|
chore_id: int = Field(..., description="ID of the chore being completed")
|
|
user_id: int = Field(..., description="ID of the user completing the chore")
|
|
completed_at: Optional[datetime] = Field(None, description="When the chore was completed (defaults to now)")
|
|
|
|
|
|
class ChoreCompletionLogUpdate(BaseModel):
|
|
"""Schema for updating a chore completion log."""
|
|
notes: Optional[str] = Field(None, description="Update notes about the completion")
|
|
verified_by_user_id: Optional[int] = Field(None, description="ID of user verifying the completion")
|
|
|
|
|
|
class ChoreCompletionLog(ChoreCompletionLogBase):
|
|
"""Schema for chore completion log response."""
|
|
id: int
|
|
chore_id: int
|
|
user_id: int
|
|
completed_at: datetime
|
|
verified_by_user_id: Optional[int] = None
|
|
created_at: datetime
|
|
|
|
# Nested objects for expanded responses
|
|
chore_title: Optional[str] = None
|
|
user_name: Optional[str] = None
|
|
user_avatar: Optional[str] = None
|
|
verified_by_name: Optional[str] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class WeeklyChoreReport(BaseModel):
|
|
"""Schema for weekly chore completion report."""
|
|
start_date: datetime
|
|
end_date: datetime
|
|
total_completions: int
|
|
completions_by_user: dict[str, int] # {username: count}
|
|
completions_by_chore: dict[str, int] # {chore_title: count}
|
|
completions_by_day: dict[str, int] # {day: count}
|
|
top_performers: list[dict] # [{username, count, avatar_url}]
|
|
recent_completions: list[ChoreCompletionLog]
|
|
|
|
|
|
class UserChoreStats(BaseModel):
|
|
"""Schema for user-specific chore statistics."""
|
|
user_id: int
|
|
username: str
|
|
full_name: Optional[str] = None
|
|
avatar_url: Optional[str] = None
|
|
total_completions: int
|
|
completions_this_week: int
|
|
completions_this_month: int
|
|
favorite_chore: Optional[str] = None
|
|
recent_completions: list[ChoreCompletionLog]
|