"""Task API schemas and helpers.""" from __future__ import annotations from datetime import date, datetime, time, timezone from pydantic import BaseModel from app.models.task import TaskCreate class TaskCreatePayload(BaseModel): deal_id: int title: str description: str | None = None due_date: date | None = None def to_domain(self) -> TaskCreate: return TaskCreate( deal_id=self.deal_id, title=self.title, description=self.description, due_date=_date_to_datetime(self.due_date) if self.due_date else None, ) def to_range_boundary(value: date | None, *, end_of_day: bool) -> datetime | None: """Convert a date query param to an inclusive datetime boundary.""" if value is None: return None boundary_time = time(23, 59, 59, 999999) if end_of_day else time(0, 0, 0) return datetime.combine(value, boundary_time, tzinfo=timezone.utc) def _date_to_datetime(value: date) -> datetime: return datetime.combine(value, time(0, 0, 0), tzinfo=timezone.utc)