| from pydantic import BaseModel, EmailStr, Field |
| from typing import Optional |
| from enum import Enum |
|
|
|
|
| class UserRole(str, Enum): |
| admin = "admin" |
| recruiter = "recruiter" |
| candidate = "candidate" |
|
|
|
|
| class UserRolePublic(str, Enum): |
| """Roles available for public self-registration — admin is excluded.""" |
| recruiter = "recruiter" |
| candidate = "candidate" |
|
|
|
|
| class UserCreate(BaseModel): |
| """Schema for user registration — admin role is not allowed.""" |
| email: EmailStr |
| password: str = Field(..., min_length=6) |
| full_name: str = Field(..., min_length=2) |
| role: UserRolePublic = UserRolePublic.recruiter |
|
|
|
|
| class UserLogin(BaseModel): |
| """Schema for user login""" |
| email: EmailStr |
| password: str |
|
|
|
|
| class TokenData(BaseModel): |
| """JWT token payload data""" |
| sub: str |
| user_id: int |
|
|
|
|
| class Token(BaseModel): |
| """Response for login/register endpoints""" |
| access_token: str |
| token_type: str = "bearer" |
| user: "UserResponse" |
|
|
|
|
| class UserResponse(BaseModel): |
| """User info response""" |
| id: int |
| email: str |
| full_name: str |
| role: UserRole |
| created_at: str |
|
|
| class Config: |
| from_attributes = True |
|
|
|
|
| class ForgotPasswordRequest(BaseModel): |
| email: EmailStr |
|
|
|
|
| class ResetPasswordRequest(BaseModel): |
| token: str |
| new_password: str = Field(..., min_length=6) |
|
|
|
|
| class MessageResponse(BaseModel): |
| message: str |
|
|
|
|
| class ForgotPasswordResponse(BaseModel): |
| message: str |
| reset_link: Optional[str] = None |
|
|