from datetime import date from enum import Enum from typing import Annotated from fastapi import Depends, Query from fastapi.exceptions import HTTPException from pydantic import BaseModel, model_validator class StatEnum(str, Enum): open = "open" closed = "closed" in_progress = "in_progress" todo = "todo" class Pagination(BaseModel): page: int | None = Query(default=0, ge=0) limit: int | None = Query(default=30, ge=0, le=50) PaginationTasksDep = Annotated[Pagination, Depends()] class Status(BaseModel): status: StatEnum | None = Query(default=None) StatusTaskDep = Annotated[Status, Depends()] class Date(BaseModel): date_from: date | None = Query(default=None) date_to: date | None = Query(default=None) @model_validator(mode="after") def check_dates(self): if self.date_from and self.date_to and self.date_to < self.date_from: raise HTTPException( status_code=422, detail="date_to cannot be less than date_from" ) return self DateDep = Annotated[Date, Depends()]