feat: enhance activity and task APIs with improved payload handling and response models
This commit is contained in:
@@ -1,13 +1,36 @@
|
||||
"""Task API schemas."""
|
||||
"""Task API schemas and helpers."""
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
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
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user