All checks were successful
Chore App Build, Test, and Push Docker Images / build-and-push (push) Successful in 3m0s
- Add backend routines management with add, get, update, delete, and list functionalities. - Create models for Routine, RoutineItem, RoutineSchedule, and RoutineExtension. - Develop event types for routine confirmation and modification. - Implement frontend components for routine assignment, confirmation dialog, and routine management views. - Add unit tests for routine API and integration tests for routine CRUD flow. - Create end-to-end test plan for routines feature covering parent and child interactions.
64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
from dataclasses import dataclass, field
|
|
from typing import Literal
|
|
from models.base import BaseModel
|
|
|
|
|
|
@dataclass
|
|
class RoutineSchedule(BaseModel):
|
|
child_id: str
|
|
routine_id: str
|
|
mode: Literal['days', 'interval']
|
|
|
|
day_configs: list = field(default_factory=list)
|
|
default_hour: int = 8
|
|
default_minute: int = 0
|
|
default_has_deadline: bool = True
|
|
|
|
interval_days: int = 2
|
|
anchor_date: str = ""
|
|
interval_has_deadline: bool = True
|
|
interval_hour: int = 0
|
|
interval_minute: int = 0
|
|
|
|
enabled: bool = True
|
|
|
|
@classmethod
|
|
def from_dict(cls, d: dict) -> 'RoutineSchedule':
|
|
return cls(
|
|
child_id=d.get('child_id'),
|
|
routine_id=d.get('routine_id'),
|
|
mode=d.get('mode', 'days'),
|
|
day_configs=d.get('day_configs', []),
|
|
default_hour=d.get('default_hour', 8),
|
|
default_minute=d.get('default_minute', 0),
|
|
default_has_deadline=d.get('default_has_deadline', True),
|
|
interval_days=d.get('interval_days', 2),
|
|
anchor_date=d.get('anchor_date', ''),
|
|
interval_has_deadline=d.get('interval_has_deadline', True),
|
|
interval_hour=d.get('interval_hour', 0),
|
|
interval_minute=d.get('interval_minute', 0),
|
|
enabled=d.get('enabled', True),
|
|
id=d.get('id'),
|
|
created_at=d.get('created_at'),
|
|
updated_at=d.get('updated_at'),
|
|
)
|
|
|
|
def to_dict(self) -> dict:
|
|
base = super().to_dict()
|
|
base.update({
|
|
'child_id': self.child_id,
|
|
'routine_id': self.routine_id,
|
|
'mode': self.mode,
|
|
'day_configs': self.day_configs,
|
|
'default_hour': self.default_hour,
|
|
'default_minute': self.default_minute,
|
|
'default_has_deadline': self.default_has_deadline,
|
|
'interval_days': self.interval_days,
|
|
'anchor_date': self.anchor_date,
|
|
'interval_has_deadline': self.interval_has_deadline,
|
|
'interval_hour': self.interval_hour,
|
|
'interval_minute': self.interval_minute,
|
|
'enabled': self.enabled,
|
|
})
|
|
return base
|