119 lines
2.4 KiB
Python
119 lines
2.4 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 UserDepartmentSectionsSchema(BaseSchema):
|
|
section_id: int
|
|
is_chief: bool
|
|
|
|
|
|
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
|
|
department_sections: list[UserDepartmentSectionsSchema] | 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 UpdateUserDepartmentSectionsRequest(BaseSchema):
|
|
department_sections: list[UserDepartmentSectionsSchema]
|
|
|
|
|
|
class CreateUserRequest(BaseSchema):
|
|
data: UserCreate
|
|
|
|
|
|
class GenerateInviteCodeRequest(BaseSchema):
|
|
user_id: int
|
|
|
|
|
|
# endregion
|
|
|
|
# region Responses
|
|
class GetAllUsersResponse(BaseSchema):
|
|
users: List[UserSchema]
|
|
|
|
|
|
class UpdateUserResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class UpdateUserDepartmentSectionsResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CreateUserResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class GetManagersResponse(BaseSchema):
|
|
managers: List[UserSchema]
|
|
|
|
|
|
class UploadPassportImageResponse(OkMessageSchema):
|
|
image_url: str | None = None
|
|
|
|
|
|
class GenerateInviteCodeResponse(OkMessageSchema):
|
|
invite_code: Optional[str] = None
|
|
# endregion
|