65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
from enum import Enum
|
|
from datetime import datetime
|
|
from decimal import Decimal
|
|
from typing import Dict
|
|
from sqlalchemy import ForeignKey, Numeric, JSON
|
|
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
|
|
|
__all__ = ["Direction", "PaymentType", "Base", "Sync", "Cart", "Item", "ItemOnCart"]
|
|
|
|
|
|
class Direction(Enum):
|
|
push = 0
|
|
pull = 1
|
|
|
|
|
|
class PaymentType(Enum):
|
|
cash = 0
|
|
card = 1
|
|
|
|
|
|
class Base(DeclarativeBase):
|
|
pass
|
|
|
|
|
|
class Sync(Base):
|
|
__tablename__ = "syncs"
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
direction: Mapped[Direction]
|
|
sync_dt: Mapped[datetime] = mapped_column(default=datetime.now())
|
|
|
|
|
|
class Item(Base):
|
|
__tablename__ = "items"
|
|
upc: Mapped[int] = mapped_column(primary_key=True)
|
|
unitprice: Mapped[Decimal] = mapped_column(Numeric(9, 2), nullable=False)
|
|
discount_name: Mapped[str]
|
|
discount_definition: Mapped[Dict[str, Dict[str, int]]] = mapped_column(
|
|
JSON, nullable=True
|
|
)
|
|
|
|
|
|
class Customer(Base):
|
|
__tablename__ = "customers"
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
document: Mapped[str] = mapped_column(nullable=False)
|
|
|
|
|
|
class Cart(Base):
|
|
__tablename__ = "carts"
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
checkin_dt: Mapped[datetime] = mapped_column(default=datetime.now())
|
|
checkout_dt: Mapped[datetime] = mapped_column(nullable=True)
|
|
total_amount: Mapped[Decimal] = mapped_column(Numeric(9, 2), nullable=True)
|
|
payment_type: Mapped[PaymentType] = mapped_column(nullable=True)
|
|
customer: Mapped[int] = mapped_column(ForeignKey("customers.id"), nullable=True)
|
|
synced: Mapped[bool]
|
|
|
|
|
|
class ItemOnCart(Base):
|
|
__tablename__ = "itemsoncart"
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
cart: Mapped[int] = mapped_column(ForeignKey("carts.id"))
|
|
upc: Mapped[int] = mapped_column(ForeignKey("items.upc"))
|
|
quantity: Mapped[int]
|