33 lines
1.4 KiB
Python
33 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
import enum
|
|
|
|
from sqlalchemy import Enum, String, Text
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from app.db.base import Base, TimestampMixin, UUIDMixin
|
|
|
|
|
|
class CustomerType(str, enum.Enum):
|
|
practice = "practice"
|
|
clinic = "clinic"
|
|
|
|
|
|
class Customer(Base, UUIDMixin, TimestampMixin):
|
|
__tablename__ = "customers"
|
|
|
|
customer_type: Mapped[CustomerType] = mapped_column(Enum(CustomerType))
|
|
source_system: Mapped[str | None] = mapped_column(String(80), index=True)
|
|
external_id: Mapped[str | None] = mapped_column(String(120), index=True)
|
|
name: Mapped[str] = mapped_column(String(220), index=True)
|
|
street: Mapped[str | None] = mapped_column(String(220))
|
|
postal_code: Mapped[str | None] = mapped_column(String(20))
|
|
city: Mapped[str | None] = mapped_column(String(120))
|
|
phone: Mapped[str | None] = mapped_column(String(80))
|
|
email: Mapped[str | None] = mapped_column(String(255))
|
|
hygiene_officer: Mapped[str | None] = mapped_column(String(160))
|
|
quality_manager: Mapped[str | None] = mapped_column(String(160))
|
|
notes: Mapped[str | None] = mapped_column(Text)
|
|
|
|
contacts: Mapped[list["Contact"]] = relationship(back_populates="customer", cascade="all, delete-orphan")
|
|
locations: Mapped[list["Location"]] = relationship(back_populates="customer", cascade="all, delete-orphan")
|