
This commit introduces new models and endpoints for managing chore history and scheduling within the application. Key changes include: - Added `ChoreHistory` and `ChoreAssignmentHistory` models to track changes and events related to chores and assignments. - Implemented CRUD operations for chore history in the `history.py` module. - Created endpoints to retrieve chore and assignment history in the `chores.py` and `groups.py` files. - Introduced a scheduling feature for group chores, allowing for round-robin assignment generation. - Updated existing chore and assignment CRUD operations to log history entries for create, update, and delete actions. This enhancement improves the tracking of chore-related events and facilitates better management of group chore assignments.
53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
# app/schemas/group.py
|
|
from pydantic import BaseModel, ConfigDict, computed_field
|
|
from datetime import datetime, date
|
|
from typing import Optional, List
|
|
|
|
from .user import UserPublic # Import UserPublic to represent members
|
|
from .chore import ChoreHistoryPublic # Import for history
|
|
|
|
# Properties to receive via API on creation
|
|
class GroupCreate(BaseModel):
|
|
name: str
|
|
|
|
# New schema for generating a schedule
|
|
class GroupScheduleGenerateRequest(BaseModel):
|
|
start_date: date
|
|
end_date: date
|
|
member_ids: Optional[List[int]] = None # Optional: if not provided, use all members
|
|
|
|
# Properties to return to client
|
|
class GroupPublic(BaseModel):
|
|
id: int
|
|
name: str
|
|
created_by_id: int
|
|
created_at: datetime
|
|
member_associations: Optional[List["UserGroupPublic"]] = None
|
|
chore_history: Optional[List[ChoreHistoryPublic]] = []
|
|
|
|
@computed_field
|
|
@property
|
|
def members(self) -> Optional[List[UserPublic]]:
|
|
if not self.member_associations:
|
|
return None
|
|
return [assoc.user for assoc in self.member_associations if assoc.user]
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
# Properties for UserGroup association
|
|
class UserGroupPublic(BaseModel):
|
|
id: int
|
|
user_id: int
|
|
group_id: int
|
|
role: str
|
|
joined_at: datetime
|
|
user: Optional[UserPublic] = None
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
# Properties stored in DB (if needed, often GroupPublic is sufficient)
|
|
# class GroupInDB(GroupPublic):
|
|
# pass
|
|
|
|
# We need to rebuild GroupPublic to resolve the forward reference to UserGroupPublic
|
|
GroupPublic.model_rebuild() |