| from __future__ import annotations |
|
|
| from sqlalchemy import Enum as SAEnum, ForeignKey, String |
| from sqlalchemy.orm import Mapped, mapped_column, relationship |
|
|
| from .base import Base, TimestampMixin, UserRole |
|
|
|
|
| class User(Base, TimestampMixin): |
| __tablename__ = "users" |
|
|
| id: Mapped[int] = mapped_column(primary_key=True) |
| dataset_id: Mapped[int | None] = mapped_column( |
| ForeignKey("datasets.id"), nullable=True, index=True |
| ) |
| name: Mapped[str] = mapped_column(String(120)) |
| email: Mapped[str] = mapped_column(String(255), unique=True, index=True) |
| phone: Mapped[str | None] = mapped_column(String(40), nullable=True) |
| zip: Mapped[str] = mapped_column(String(10)) |
| |
| password_hash: Mapped[str | None] = mapped_column(String(255), nullable=True) |
| role: Mapped[UserRole] = mapped_column( |
| SAEnum(UserRole, native_enum=False), default=UserRole.owner |
| ) |
|
|
| dogs: Mapped[list["KnownDog"]] = relationship( |
| back_populates="owner", cascade="all, delete-orphan" |
| ) |
|
|