import enum import uuid from datetime import datetime from sqlalchemy import DateTime, Enum, Float, ForeignKey, Integer, String, Text from sqlalchemy.orm import Mapped, mapped_column, relationship from app.database import Base def _uuid() -> str: return str(uuid.uuid4()) def _now() -> datetime: return datetime.utcnow() class EmployeeStatus(str, enum.Enum): active = "active" inactive = "inactive" class DigitalEmployee(Base): __tablename__ = "digital_employees" id: Mapped[str] = mapped_column(String(36), primary_key=True, default=_uuid) tenant_id: Mapped[str] = mapped_column( String(36), ForeignKey("tenants.id"), nullable=False, index=True ) name: Mapped[str] = mapped_column(String(200), nullable=False) role: Mapped[str] = mapped_column(String(100), nullable=False) avatar_url: Mapped[str | None] = mapped_column(String(500), nullable=True) system_prompt: Mapped[str] = mapped_column(Text, nullable=False) greeting: Mapped[str | None] = mapped_column(Text, nullable=True) temperature: Mapped[float] = mapped_column(Float, default=0.7) max_context_messages: Mapped[int] = mapped_column(Integer, default=20) knowledge_base_ids: Mapped[str] = mapped_column(Text, default="[]") status: Mapped[EmployeeStatus] = mapped_column( Enum(EmployeeStatus), default=EmployeeStatus.active ) created_at: Mapped[datetime] = mapped_column(DateTime, default=_now) updated_at: Mapped[datetime] = mapped_column(DateTime, default=_now, onupdate=_now) tenant = relationship("Tenant", lazy="selectin")