Files
piaps-course-work-university/backend/app/auth/schemas.py

62 lines
1.8 KiB
Python

from typing import Self
from pydantic import (
BaseModel,
ConfigDict,
EmailStr,
Field,
model_validator,
)
from app.auth.utils import get_password_hash
class EmailModel(BaseModel):
email: EmailStr = Field(description="Электронная почта")
model_config = ConfigDict(from_attributes=True)
class UserBase(EmailModel):
name: str = Field(
min_length=3, max_length=50, description="Имя, от 3 до 50 символов"
)
surname: str = Field(
min_length=3, max_length=50, description="Фамилия, от 3 до 50 символов"
)
patronymic: str = Field(
min_length=3,
max_length=50,
description="Отчество, от 3 до 50 символов",
default=None,
)
class SDeanRegister(UserBase):
password: str = Field(
min_length=5, max_length=50, description="Пароль, от 5 до 50 знаков"
)
confirm_password: str = Field(
min_length=5, max_length=50, description="Повторите пароль"
)
@model_validator(mode="after")
def check_password(self) -> Self:
if self.password != self.confirm_password:
raise ValueError("Пароли не совпадают")
self.password = get_password_hash(
self.password
) # хешируем пароль до сохранения в базе данных
return self
class SDeanAddDB(UserBase):
password: str = Field(min_length=5, description="Пароль в формате HASH-строки")
class SDeanAuth(EmailModel):
password: str = Field(
min_length=5, max_length=50, description="Пароль, от 5 до 50 знаков"
)
class SDeanInfo(UserBase):
id: int = Field(description="Идентификатор пользователя")