37 lines
1.0 KiB
Python
37 lines
1.0 KiB
Python
"""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)
|