Files
Fulfillment-Backend/schemas/user.py

98 lines
1.9 KiB
Python

from typing import List, Optional
from pydantic import model_validator
from schemas.base import BaseSchema, OkMessageSchema
from schemas.payrate import PayRateSchema
from schemas.position import PositionSchema
from schemas.role import RoleSchema
# region Entities
class PassportImageSchema(BaseSchema):
id: int
user_id: int
image_url: str
class BasicUser(BaseSchema):
telegram_id: int
phone_number: str | None = None
first_name: str
second_name: str
patronymic: str
comment: str
passport_data: str | None = None
is_admin: bool
is_blocked: bool
is_deleted: bool
role_key: str
pay_rate: Optional[PayRateSchema] = None
passport_image_url: str | None = None
passport_images: list[PassportImageSchema] | None = []
@model_validator(mode="after")
def image_url_to_list(cls, values):
passport_images = values.passport_images
if not passport_images:
return values
latest_image = passport_images[-1]
values.passport_image_url = latest_image.image_url
return values
class BaseUser(BasicUser):
id: int
class UserSchema(BaseUser):
role: RoleSchema
position: Optional[PositionSchema] = None
class UserUpdate(BaseUser):
position_key: Optional[str] = None
class UserCreate(BasicUser):
position_key: Optional[str] = None
# endregion
# region Requests
class UpdateUserRequest(BaseSchema):
data: UserUpdate
class CreateUserRequest(BaseSchema):
data: UserCreate
# endregion
# region Responses
class GetAllUsersResponse(BaseSchema):
users: List[UserSchema]
class UpdateUserResponse(OkMessageSchema):
pass
class CreateUserResponse(OkMessageSchema):
pass
class GetManagersResponse(BaseSchema):
managers: List[UserSchema]
class UploadPassportImageResponse(OkMessageSchema):
image_url: str | None = None
# endregion