forge/backend/app/schemas/user.py
DJP 7a804e896d Initial commit - FORGE AI unified platform
Features:
- Image generation (OpenAI, Gemini, Leonardo, Bria, Stability, Flux)
- Nano Banana iterative editing
- Video generation and upscaling
- Audio TTS, STT, sound effects (ElevenLabs)
- Text prompt studio and alt text
- User authentication with JWT/cookies
- Admin panel with voice management
- Job queue with Celery
- PostgreSQL + Redis backend
- Next.js 15 + FastAPI architecture

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
2025-12-09 20:39:00 -05:00

77 lines
1.8 KiB
Python

"""User Schemas"""
from pydantic import BaseModel, EmailStr, validator
from typing import Optional
from datetime import datetime
from uuid import UUID
class UserBase(BaseModel):
email: EmailStr
display_name: Optional[str] = None
role: str = "user"
department: Optional[str] = None
class UserCreate(UserBase):
azure_oid: Optional[str] = None
password: Optional[str] = None # Optional for SSO users
class UserSignUp(BaseModel):
"""Schema for user registration"""
email: EmailStr
password: str
display_name: str
@validator("password")
def validate_password(cls, v):
if len(v) < 8:
raise ValueError("Password must be at least 8 characters")
return v
class UserLogin(BaseModel):
"""Schema for user login"""
email: EmailStr
password: str
class UserUpdate(BaseModel):
display_name: Optional[str] = None
role: Optional[str] = None
department: Optional[str] = None
is_active: Optional[bool] = None
avatar_url: Optional[str] = None
class PasswordChange(BaseModel):
"""Schema for changing password"""
current_password: str
new_password: str
@validator("new_password")
def validate_password(cls, v):
if len(v) < 8:
raise ValueError("Password must be at least 8 characters")
return v
class UserResponse(UserBase):
id: UUID
azure_oid: Optional[str] = None
avatar_url: Optional[str] = None
is_active: bool
last_login_at: Optional[datetime] = None
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class TokenResponse(BaseModel):
"""Schema for JWT token response"""
access_token: str
token_type: str = "bearer"
expires_in: int
user: UserResponse