Upload app/schemas/user.py

This commit is contained in:
2026-06-04 00:06:23 +00:00
parent 8b18c6a012
commit 09b1ca4b8b
+56
View File
@@ -0,0 +1,56 @@
"""Pydantic schemas for User endpoints."""
from __future__ import annotations
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, ConfigDict, EmailStr, Field
from app.models.user import UserRole
class UserOut(BaseModel):
"""Response schema for a user (never includes password_hash)."""
model_config = ConfigDict(from_attributes=True)
id: int
email: EmailStr
name: str
role: UserRole
org_id: int
avatar_url: Optional[str] = None
email_notifications: bool = True
created_at: datetime
class UserUpdate(BaseModel):
"""Request body for PATCH /api/v1/users/{id} (admin or self)."""
name: Optional[str] = Field(None, min_length=1, max_length=255)
avatar_url: Optional[str] = Field(None, max_length=1024)
email_notifications: Optional[bool] = None
role: Optional[UserRole] = None # admin-only
class UserCreateRequest(BaseModel):
"""Request body for POST /api/v1/users (admin-only)."""
email: EmailStr
password: str = Field(..., min_length=8, max_length=128)
name: str = Field(..., min_length=1, max_length=255)
role: UserRole = UserRole.sales_rep
class UserListResponse(BaseModel):
"""Response schema for paginated user list."""
items: list[UserOut]
total: int
page: int
page_size: int
# Re-export for late import in auth.py
__all__ = ["UserCreateRequest", "UserListResponse", "UserOut", "UserUpdate"]