All checks were successful
Chore App Build, Test, and Push Docker Images / build-and-push (push) Successful in 2m34s
- Implemented ChoreAssignView for assigning chores to children. - Created ChoreConfirmDialog for confirming chore completion. - Developed KindnessAssignView for assigning kindness acts. - Added PenaltyAssignView for assigning penalties. - Introduced ChoreEditView and ChoreView for editing and viewing chores. - Created KindnessEditView and KindnessView for managing kindness acts. - Developed PenaltyEditView and PenaltyView for managing penalties. - Added TaskSubNav for navigation between chores, kindness acts, and penalties.
48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
from dataclasses import dataclass
|
|
from typing import Literal
|
|
from models.base import BaseModel
|
|
|
|
TaskType = Literal['chore', 'kindness', 'penalty']
|
|
|
|
@dataclass
|
|
class Task(BaseModel):
|
|
name: str
|
|
points: int
|
|
type: TaskType
|
|
image_id: str | None = None
|
|
user_id: str | None = None
|
|
|
|
@classmethod
|
|
def from_dict(cls, d: dict):
|
|
# Support legacy is_good field for migration
|
|
task_type = d.get('type')
|
|
if task_type is None:
|
|
is_good = d.get('is_good', True)
|
|
task_type = 'chore' if is_good else 'penalty'
|
|
return cls(
|
|
name=d.get('name'),
|
|
points=d.get('points', 0),
|
|
type=task_type,
|
|
image_id=d.get('image_id'),
|
|
user_id=d.get('user_id'),
|
|
id=d.get('id'),
|
|
created_at=d.get('created_at'),
|
|
updated_at=d.get('updated_at')
|
|
)
|
|
|
|
def to_dict(self):
|
|
base = super().to_dict()
|
|
base.update({
|
|
'name': self.name,
|
|
'points': self.points,
|
|
'type': self.type,
|
|
'image_id': self.image_id,
|
|
'user_id': self.user_id
|
|
})
|
|
return base
|
|
|
|
@property
|
|
def is_good(self) -> bool:
|
|
"""Backward compatibility: chore and kindness are 'good', penalty is not."""
|
|
return self.type != 'penalty'
|