from typing import Optional from datetime import datetime from decimal import Decimal from sqlalchemy import ( DateTime, Integer, String, DECIMAL, ForeignKey, PrimaryKeyConstraint, ForeignKeyConstraint, UniqueConstraint, ) from sqlalchemy.sql import func from sqlalchemy.orm import Mapped, mapped_column from core.database import Base class Package(Base): __tablename__ = "packages" # GBultos __table_args__ = ( PrimaryKeyConstraint("id", name="packages_pkey"), ForeignKeyConstraint( ["tenant_id"], ["a76.tenants.id"], name="fk_packages_tenant" ), ForeignKeyConstraint( ["company_id"], ["a76.company.id"], name="fk_packages_company" ), UniqueConstraint("tenant_id", "company_id", "key", name="packages_key_ukey"), {"schema": "a76"}, ) id: Mapped[int] = mapped_column(Integer, primary_key=True) tenant_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True) company_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True) key: Mapped[str] = mapped_column(String(5)) description_es: Mapped[Optional[str]] = mapped_column(String(40)) description_en: Mapped[Optional[str]] = mapped_column(String(40)) weight_unit: Mapped[Optional[Decimal]] = mapped_column(DECIMAL(19, 8)) plurals: Mapped[Optional[str]] = mapped_column(String(4)) plural_in: Mapped[Optional[str]] = mapped_column(String(4)) code_ace: Mapped[Optional[str]] = mapped_column(String(4)) code_aamex: Mapped[Optional[str]] = mapped_column(String(9)) # Timestamps created_at: Mapped[datetime] = mapped_column( DateTime, nullable=False, default=func.now() ) updated_at: Mapped[datetime] = mapped_column( DateTime, nullable=False, default=func.now(), onupdate=func.now() ) deleted_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)