Files
2025-03-05 19:34:16 +03:00

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