All checks were successful
Chore App Build, Test, and Push Docker Images / build-and-push (push) Successful in 2m45s
- Implemented TimeSelector component for selecting time with AM/PM toggle and minute/hour increment/decrement functionality. - Created ScheduleModal component for scheduling chores with options for specific days or intervals. - Added utility functions for scheduling logic in scheduleUtils.ts. - Developed comprehensive tests for TimeSelector and scheduleUtils functions to ensure correct behavior.
72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
from dataclasses import dataclass, field
|
||
from typing import Literal
|
||
from models.base import BaseModel
|
||
|
||
|
||
@dataclass
|
||
class DayConfig:
|
||
day: int # 0=Sun, 1=Mon, ..., 6=Sat
|
||
hour: int # 0–23 (24h)
|
||
minute: int # 0, 15, 30, or 45
|
||
|
||
def to_dict(self) -> dict:
|
||
return {
|
||
'day': self.day,
|
||
'hour': self.hour,
|
||
'minute': self.minute,
|
||
}
|
||
|
||
@classmethod
|
||
def from_dict(cls, d: dict) -> 'DayConfig':
|
||
return cls(
|
||
day=d.get('day', 0),
|
||
hour=d.get('hour', 0),
|
||
minute=d.get('minute', 0),
|
||
)
|
||
|
||
|
||
@dataclass
|
||
class ChoreSchedule(BaseModel):
|
||
child_id: str
|
||
task_id: str
|
||
mode: Literal['days', 'interval']
|
||
|
||
# mode='days' fields
|
||
day_configs: list = field(default_factory=list) # list of DayConfig dicts
|
||
|
||
# mode='interval' fields
|
||
interval_days: int = 2 # 2–7
|
||
anchor_weekday: int = 0 # 0=Sun–6=Sat
|
||
interval_hour: int = 0
|
||
interval_minute: int = 0
|
||
|
||
@classmethod
|
||
def from_dict(cls, d: dict) -> 'ChoreSchedule':
|
||
return cls(
|
||
child_id=d.get('child_id'),
|
||
task_id=d.get('task_id'),
|
||
mode=d.get('mode', 'days'),
|
||
day_configs=d.get('day_configs', []),
|
||
interval_days=d.get('interval_days', 2),
|
||
anchor_weekday=d.get('anchor_weekday', 0),
|
||
interval_hour=d.get('interval_hour', 0),
|
||
interval_minute=d.get('interval_minute', 0),
|
||
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,
|
||
'task_id': self.task_id,
|
||
'mode': self.mode,
|
||
'day_configs': self.day_configs,
|
||
'interval_days': self.interval_days,
|
||
'anchor_weekday': self.anchor_weekday,
|
||
'interval_hour': self.interval_hour,
|
||
'interval_minute': self.interval_minute,
|
||
})
|
||
return base
|