2025-03-26 16:23:39 +00:00

60 lines
2.0 KiB
Python

from pydantic import BaseModel, EmailStr, Field
from typing import Optional
from datetime import datetime
class UserBase(BaseModel):
first_name: str = Field(..., min_length=2, max_length=50)
last_name: str = Field(..., min_length=2, max_length=50)
email: EmailStr = Field(..., description="User email address")
role: str = Field(default="student")
grade_level: Optional[int] = None
student_id: Optional[str] = None
phone_number: Optional[str] = None
address: Optional[str] = None
date_of_birth: Optional[datetime] = None
profile_picture: Optional[str] = None
class UserCreate(UserBase):
password: str = Field(..., min_length=8, max_length=100)
class Config:
schema_extra = {
"example": {
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"password": "securepass123",
"role": "student",
"grade_level": 10,
"student_id": "STU123",
"phone_number": "123-456-7890",
"address": "123 Main St",
"date_of_birth": "2000-01-01T00:00:00",
"profile_picture": "profile.jpg"
}
}
class UserResponse(UserBase):
id: int
is_active: bool = True
last_login: Optional[datetime] = None
class Config:
orm_mode = True
schema_extra = {
"example": {
"id": 1,
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"role": "student",
"grade_level": 10,
"student_id": "STU123",
"phone_number": "123-456-7890",
"address": "123 Main St",
"date_of_birth": "2000-01-01T00:00:00",
"profile_picture": "profile.jpg",
"is_active": True,
"last_login": "2023-01-01T12:00:00"
}
}