diff --git a/backend/app/schemas/common.py b/backend/app/schemas/common.py new file mode 100644 index 0000000..55795f8 --- /dev/null +++ b/backend/app/schemas/common.py @@ -0,0 +1,44 @@ +"""Common shared schemas.""" +from typing import Optional, Any, List, Generic, TypeVar +from pydantic import BaseModel +from datetime import datetime + +T = TypeVar("T") + + +class PaginatedResponse(BaseModel, Generic[T]): + """Generic paginated response wrapper.""" + items: List[T] + total: int + page: int = 1 + page_size: int = 20 + + +class SuccessResponse(BaseModel): + """Simple success response.""" + success: bool = True + message: str = "" + data: Optional[Any] = None + + +class TokenResponse(BaseModel): + """JWT token response.""" + access_token: str + token_type: str = "bearer" + user: "UserBrief" + + +class UserBrief(BaseModel): + """Brief user info embedded in responses.""" + id: int + username: str + email: str + role: str + user_type: str + tenant_id: int + + model_config = {"from_attributes": True} + + +# Update forward refs +TokenResponse.model_rebuild()