|
|
|
@ -2,7 +2,7 @@
|
|
|
|
from datetime import datetime
|
|
|
|
from datetime import datetime
|
|
|
|
from typing import Generic, List, Optional, TypeVar
|
|
|
|
from typing import Generic, List, Optional, TypeVar
|
|
|
|
import uuid
|
|
|
|
import uuid
|
|
|
|
from pydantic import BaseModel, Field, SecretStr, ConfigDict
|
|
|
|
from pydantic import BaseModel, Field, SecretStr, ConfigDict, model_validator
|
|
|
|
from sqlalchemy import Column, DateTime, String, func, event
|
|
|
|
from sqlalchemy import Column, DateTime, String, func, event
|
|
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
@ -100,9 +100,11 @@ class StandardResponse(BaseModel, Generic[T]):
|
|
|
|
|
|
|
|
|
|
|
|
class CommonParams(DefaultBase):
|
|
|
|
class CommonParams(DefaultBase):
|
|
|
|
# This ensures no extra query params are allowed
|
|
|
|
# This ensures no extra query params are allowed
|
|
|
|
current_user: Optional[str] = Field(None, alias="currentUser")
|
|
|
|
current_user: Optional[str] = Field(None, alias="current_user")
|
|
|
|
|
|
|
|
currentUser: Optional[str] = Field(None, description="Alias for current_user")
|
|
|
|
page: int = Field(1, gt=0, lt=2147483647)
|
|
|
|
page: int = Field(1, gt=0, lt=2147483647)
|
|
|
|
items_per_page: int = Field(5, gt=-2, lt=2147483647, alias="itemsPerPage")
|
|
|
|
items_per_page: int = Field(5, gt=-2, lt=2147483647, alias="items_per_page")
|
|
|
|
|
|
|
|
itemsPerPage: Optional[int] = Field(None, description="Alias for items_per_page")
|
|
|
|
query_str: Optional[str] = Field(None, alias="q")
|
|
|
|
query_str: Optional[str] = Field(None, alias="q")
|
|
|
|
filter_spec: Optional[str] = Field(None, alias="filter")
|
|
|
|
filter_spec: Optional[str] = Field(None, alias="filter")
|
|
|
|
sort_by: List[str] = Field(default_factory=list, alias="sortBy[]")
|
|
|
|
sort_by: List[str] = Field(default_factory=list, alias="sortBy[]")
|
|
|
|
@ -110,6 +112,16 @@ class CommonParams(DefaultBase):
|
|
|
|
exclude: List[str] = Field(default_factory=list, alias="exclude[]")
|
|
|
|
exclude: List[str] = Field(default_factory=list, alias="exclude[]")
|
|
|
|
all_params: int = Field(0, alias="all")
|
|
|
|
all_params: int = Field(0, alias="all")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@model_validator(mode="before")
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
|
|
|
def resolve_aliases(cls, data: any) -> any:
|
|
|
|
|
|
|
|
if isinstance(data, dict):
|
|
|
|
|
|
|
|
if "itemsPerPage" in data and data["itemsPerPage"] is not None:
|
|
|
|
|
|
|
|
data.setdefault("items_per_page", data["itemsPerPage"])
|
|
|
|
|
|
|
|
if "currentUser" in data and data["currentUser"] is not None:
|
|
|
|
|
|
|
|
data.setdefault("current_user", data["currentUser"])
|
|
|
|
|
|
|
|
return data
|
|
|
|
|
|
|
|
|
|
|
|
# Property to mirror your original return dict's bool conversion
|
|
|
|
# Property to mirror your original return dict's bool conversion
|
|
|
|
@property
|
|
|
|
@property
|
|
|
|
def is_all(self) -> bool:
|
|
|
|
def is_all(self) -> bool:
|
|
|
|
|