Spaces:
Running
Running
| import uuid | |
| from datetime import datetime, timezone | |
| from typing import Optional, List, TYPE_CHECKING | |
| from sqlmodel import Field, SQLModel, Relationship | |
| from .enums import RoleEnum, SpecialtyEnum | |
| from .membership import Membership | |
| if TYPE_CHECKING: | |
| from .procedure import Procedure | |
| from .team import Team | |
| class User(SQLModel, table=True): | |
| """ | |
| Represents a row in the `users` table. | |
| """ | |
| __tablename__ = "users" | |
| id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) | |
| email: str = Field(unique=True, index=True, nullable=False) | |
| full_name: str = Field(nullable=False) | |
| role: RoleEnum = Field(nullable=False) | |
| specialty: Optional[SpecialtyEnum] = Field(default=None) | |
| avatar_url: Optional[str] = Field(default=None) | |
| is_active: bool = Field(default=True) | |
| created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |
| # Relationships | |
| procedures: List["Procedure"] = Relationship(back_populates="doctor") | |
| teams: List["Team"] = Relationship(back_populates="members", link_model=Membership) |