Skip to content

Commit

Permalink
feat: order, customer, ship schemas
Browse files Browse the repository at this point in the history
  • Loading branch information
Apollosuny committed Nov 30, 2024
1 parent 2ccdac3 commit 83f3504
Showing 1 changed file with 110 additions and 3 deletions.
113 changes: 110 additions & 3 deletions plugins/models/models.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import declarative_base, relationship
from sqlalchemy import (
PrimaryKeyConstraint,
ForeignKey,
Column,
DateTime,
String,
Boolean,
Enum,
Integer,
func,
)
import enum

base = declarative_base()


class Products(base):
__tablename__ = "products"
class Product(base):
__tablename__ = "product"
__table_args__ = (PrimaryKeyConstraint("sku", name="sku"),)

sku = Column(String, unique=True)
Expand All @@ -21,3 +26,105 @@ class Products(base):
asin = Column(String, unique=True)
createdAt = Column(DateTime, default=func.now())
updatedAt = Column(DateTime, default=func.now(), onupdate=func.now())


class Customer(base):
__tablename__ = "customer"
__table_args__ = (PrimaryKeyConstraint("customerId", name="customerId"),)

customerId = Column(String, unique=True)
name = Column(String)
email = Column(String)
phone = Column(String)
country = Column(String)
city = Column(String)
state = Column(String)
postalCode = Column(String)
createdAt = Column(DateTime, default=func.now())
updatedAt = Column(DateTime, default=func.now(), onupdate=func.now())

# relationships
orders = relationship("Order", back_populates="customer")


class OrderStatus(enum.Enum):
SHIPPED = "shipped"
SHIPPED_DELIVERED_TO_BUYER = "shipped-delivered-to-buyer"
SHIPPED_RETURNED_TO_SELLER = "shipped-returned-to-seller"
SHIPPED_PICKED_UP = "shipped-picked-up"
CANCELLED = "cancelled"


class OrderFullfillment(enum.Enum):
AMAZON = "amazon"
MERCHANT = "merchant"


class OrderSalesChannel(enum.Enum):
AMAZON = "amazon"
NOT_AMAZON = "not-amazon"


class Order(base):
__tablename__ = "order"
__table_args__ = (PrimaryKeyConstraint("orderId", name="orderId"),)

orderId = Column(String, unique=True)
date = Column(DateTime)
B2B = Column(Boolean)
status = Column(Enum(OrderStatus), nullable=False)
fullfillment = Column(Enum(OrderFullfillment), nullable=False)
orderChannel = Column(Enum(OrderSalesChannel), nullable=False)
promotionIds = Column(String)
createdAt = Column(DateTime, default=func.now())
updatedAt = Column(DateTime, default=func.now(), onupdate=func.now())

# relationships
customerId = Column(Integer, ForeignKey("customer.customerId"), nullable=False)
customer = relationship("Customer", back_populates="order")


class OrderDetail(base):
__tablename__ = "order_detail"
__table_args__ = (PrimaryKeyConstraint("orderId", "sku", name="orderId_sku"),)

orderId = Column(String, ForeignKey("order.orderId"), nullable=False)
sku = Column(String, ForeignKey("product.sku"), nullable=False)
quantity = Column(Integer, nullable=False)
amount = Column(Integer, nullable=False)
currency = Column(String, nullable=False, default="INR")
createdAt = Column(DateTime, default=func.now())
updatedAt = Column(DateTime, default=func.now(), onupdate=func.now())

# relationships
order = relationship("Order", back_populates="order_detail")
product = relationship("Product", back_populates="order_detail")


class ShippingServiceLevel(enum.Enum):
STANDARD = "standard"
EXPEDITED = "expedited"


class ShippingCourierStatus(enum.Enum):
SHIPPED = "shipped"
UNSHIPPED = "unshipped"
CANCELLED = "cancelled"


class Shipping(base):
__tablename__ = "shipping"
__table_args__ = (PrimaryKeyConstraint("orderId", name="orderId"),)

orderId = Column(String, ForeignKey("order.orderId"), nullable=False)
shipServiceLevel = Column(Enum(ShippingServiceLevel), nullable=False)
courierStatus = Column(Enum(ShippingCourierStatus), nullable=False)
city = Column(String)
state = Column(String)
postalCode = Column(String)
country = Column(String)
createdAt = Column(DateTime, default=func.now())
updatedAt = Column(DateTime, default=func.now(), onupdate=func.now())

# relationships
order = relationship("Order", back_populates="shipping")

0 comments on commit 83f3504

Please sign in to comment.