from datetime import datetime from pydantic import BaseModel, ConfigDict, Field from typing import Optional class UserCreate(BaseModel): username: str = Field(..., min_length=2, max_length=50) display_name: str = Field(..., min_length=1, max_length=100) password: str = Field(..., min_length=6) email: Optional[str] = None phone: Optional[str] = None role: str = Field(default="developer", pattern="^(admin|dba|developer|guest)$") class UserUpdate(BaseModel): display_name: Optional[str] = None email: Optional[str] = None phone: Optional[str] = None role: Optional[str] = Field(default=None, pattern="^(admin|dba|developer|guest)$") is_active: Optional[bool] = None class UserResponse(BaseModel): id: int username: str display_name: str email: Optional[str] = None phone: Optional[str] = None role: str is_active: bool last_login: Optional[datetime] = None created_at: datetime model_config = ConfigDict(from_attributes=True) class PasswordChange(BaseModel): old_password: str new_password: str = Field(..., min_length=6)