| from pydantic import BaseModel, EmailStr, Field, validator |
| from typing import List, Optional |
|
|
| |
| class User(BaseModel): |
| name: str = Field(..., min_length=3, max_length=50) |
| email: EmailStr |
| password: str |
|
|
| @validator("password") |
| def validate_password(cls, value): |
| if len(value) < 8: |
| raise ValueError("Password must be at least 8 characters long.") |
| if not any(char.isdigit() for char in value): |
| raise ValueError("Password must include at least one number.") |
| if not any(char.isupper() for char in value): |
| raise ValueError("Password must include at least one uppercase letter.") |
| if not any(char.islower() for char in value): |
| raise ValueError("Password must include at least one lowercase letter.") |
| if not any(char in "!@#$%^&*()-_+=<>?/" for char in value): |
| raise ValueError("Password must include at least one special character.") |
| return value |
|
|
| class UserUpdate(BaseModel): |
| name: Optional[str] = Field(None, min_length=3, max_length=50) |
| email: Optional[EmailStr] |
| password: Optional[str] |
|
|
| @validator("password") |
| def validate_password(cls, value): |
| if value is not None: |
| if len(value) < 8: |
| raise ValueError("Password must be at least 8 characters long.") |
| if not any(char.isdigit() for char in value): |
| raise ValueError("Password must include at least one number.") |
| if not any(char.isupper() for char in value): |
| raise ValueError("Password must include at least one uppercase letter.") |
| if not any(char.islower() for char in value): |
| raise ValueError("Password must include at least one lowercase letter.") |
| if not any(char in "!@#$%^&*()-_+=<>?/" for char in value): |
| raise ValueError("Password must include at least one special character.") |
| return value |
|
|
| class Token(BaseModel): |
| access_token: str |
| refresh_token: str |
| token_type: str |
|
|
| class LoginResponse(Token): |
| name: str |
| avatar: Optional[str] = None |
|
|
| class TokenData(BaseModel): |
| email: Optional[str] = None |
|
|