from datetime import date from typing import Optional from pydantic import BaseModel, EmailStr, Field from app.domain.entities.roles import RoleRead from app.domain.entities.statuses import StatusRead class UserRegister(BaseModel): first_name: str = Field(max_length=250) last_name: str = Field(max_length=250) patronymic: Optional[str] = Field(default=None, max_length=250) login: str = Field(max_length=250) email: Optional[EmailStr] = None birthdate: date password: str = Field(min_length=8) repeat_password: str = Field(min_length=8) class UserCreate(BaseModel): first_name: str = Field(max_length=250) last_name: str = Field(max_length=250) patronymic: Optional[str] = Field(default=None, max_length=250) login: str = Field(max_length=250) email: Optional[EmailStr] = None birthdate: date password: str = Field(min_length=8) repeat_password: str = Field(min_length=8) role_id: Optional[int] = Field(default=None) class UserUpdate(BaseModel): first_name: str = Field(max_length=250) last_name: str = Field(max_length=250) patronymic: Optional[str] = Field(default=None, max_length=250) login: str = Field(max_length=250) email: Optional[EmailStr] = None birthdate: date role_id: Optional[int] = Field(default=None) status_id: Optional[int] = Field(default=None) class PasswordChangeRequest(BaseModel): password: str repeat_password: str class UserRead(BaseModel): id: int first_name: str last_name: str patronymic: Optional[str] login: str email: Optional[EmailStr] birthdate: date status_id: int role_id: int role: RoleRead status: StatusRead class Config: from_attributes = True class UserCheckLessonBase(BaseModel): lesson_id: int user_id: int class UserCheckLessonCreate(UserCheckLessonBase): pass class UserCheckLessonRead(UserCheckLessonBase): id: int class Config: from_attributes = True