51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.config import get_settings
|
|
from app.memory.service import MemoryService
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class EveningSchedule:
|
|
enabled: bool
|
|
hour: int
|
|
minute: int
|
|
|
|
|
|
def resolve_evening_schedule(db: Session, user_id: int) -> EveningSchedule:
|
|
settings = get_settings()
|
|
profile = MemoryService(db, user_id).get_profile()
|
|
|
|
enabled_raw = profile.get("evening_summary_enabled")
|
|
if enabled_raw is None:
|
|
enabled = settings.evening_summary_enabled
|
|
else:
|
|
enabled = bool(enabled_raw) if not isinstance(enabled_raw, str) else enabled_raw.lower() in (
|
|
"1",
|
|
"true",
|
|
"yes",
|
|
"on",
|
|
)
|
|
|
|
hour = profile.get("evening_summary_hour")
|
|
minute = profile.get("evening_summary_minute")
|
|
try:
|
|
resolved_hour = int(hour) if hour is not None and str(hour).strip() != "" else settings.evening_summary_hour
|
|
except (TypeError, ValueError):
|
|
resolved_hour = settings.evening_summary_hour
|
|
try:
|
|
resolved_minute = (
|
|
int(minute) if minute is not None and str(minute).strip() != "" else settings.evening_summary_minute
|
|
)
|
|
except (TypeError, ValueError):
|
|
resolved_minute = settings.evening_summary_minute
|
|
|
|
return EveningSchedule(
|
|
enabled=enabled,
|
|
hour=max(0, min(23, resolved_hour)),
|
|
minute=max(0, min(59, resolved_minute)),
|
|
)
|