|
| 1 | +from typing import Optional |
| 2 | +from uuid import UUID, uuid4 |
| 3 | +from sqlmodel import Field, SQLModel |
| 4 | +from pydantic import EmailStr |
| 5 | +from .base import BaseModel |
| 6 | + |
| 7 | + |
| 8 | +class AdminBase(SQLModel): |
| 9 | + """Shared fields between table and API models""" |
| 10 | + admin_name: str = Field(min_length=1, max_length=100, nullable=False) |
| 11 | + default_cap: Optional[int] = Field(default=None) |
| 12 | + admin_phone: str = Field(min_length=1, max_length=100, nullable=False) |
| 13 | + admin_email: EmailStr = Field(nullable=False) |
| 14 | + route_start_time: Optional[str] = Field(default=None) |
| 15 | + warehouse_location: Optional[str] = Field(default=None, min_length=1) |
| 16 | + preferred_language: Optional[str] = Field(default=None) |
| 17 | + admin_timezone: Optional[str] = Field(default=None) |
| 18 | + |
| 19 | +class Admin(AdminBase, BaseModel, table=True): |
| 20 | + """Database table model""" |
| 21 | + __tablename__ = "admin_info" |
| 22 | + |
| 23 | + admin_id: UUID = Field(default_factory=uuid4, primary_key=True) |
| 24 | + |
| 25 | +class AdminCreate(AdminBase): |
| 26 | + """Create request model""" |
| 27 | + pass |
| 28 | + |
| 29 | +class AdminRead(AdminBase): |
| 30 | + """Read response model""" |
| 31 | + admin_id: UUID |
| 32 | + |
| 33 | +class AdminUpdate(SQLModel): |
| 34 | + """Update request model - all optional""" |
| 35 | + admin_name: Optional[str] = Field(default=None, min_length=1, max_length=100) |
| 36 | + default_cap: Optional[int] = Field(default=None) |
| 37 | + admin_phone: Optional[str] = Field(default=None, min_length=1, max_length=100) |
| 38 | + admin_email: Optional[EmailStr] = Field(default=None) |
| 39 | + route_start_time: Optional[str] = Field(default=None) |
| 40 | + warehouse_location: Optional[str] = Field(default=None, min_length=1) |
| 41 | + preferred_language: Optional[str] = Field(default=None) |
| 42 | + admin_timezone: Optional[str] = Field(default=None) |
| 43 | + |
| 44 | +class AdminRegister(SQLModel): |
| 45 | + """Admin registration request""" |
| 46 | + admin_name: str = Field(min_length=1, max_length=100) |
| 47 | + admin_phone: str = Field(min_length=1, max_length=100) |
| 48 | + admin_email: EmailStr |
| 49 | + admin_password: str = Field(min_length=8, max_length=100) |
0 commit comments