46 lines
1.1 KiB
Python
46 lines
1.1 KiB
Python
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()]
|