65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
from Controllers.Postgres.engine import Base
|
|
from sqlalchemy import Column, Integer, String, Float, ForeignKey
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
from sqlalchemy_mixins.serialize import SerializeMixin
|
|
from sqlalchemy_mixins.repr import ReprMixin
|
|
from sqlalchemy_mixins.smartquery import SmartQueryMixin
|
|
from sqlalchemy_mixins.activerecord import ActiveRecordMixin
|
|
|
|
|
|
class BasicMixin(
|
|
Base,
|
|
ActiveRecordMixin,
|
|
SerializeMixin,
|
|
ReprMixin,
|
|
SmartQueryMixin,
|
|
):
|
|
|
|
__abstract__ = True
|
|
__repr__ = ReprMixin.__repr__
|
|
|
|
id = mapped_column(Integer, primary_key=True)
|
|
|
|
|
|
class Product(BasicMixin):
|
|
__tablename__ = 'products'
|
|
name = Column(String, unique=True)
|
|
price = Column(Float)
|
|
|
|
class Category(BasicMixin):
|
|
__tablename__ = 'categories'
|
|
name = Column(String, unique=True)
|
|
|
|
class Supplier(BasicMixin):
|
|
__tablename__ = 'suppliers'
|
|
name = Column(String, unique=True)
|
|
rating = Column(Float)
|
|
|
|
class ShippingAddress(BasicMixin):
|
|
__tablename__ = 'shipping_addresses'
|
|
address_line_1 = Column(String, unique=True)
|
|
city = Column(String)
|
|
zip_code = Column(String)
|
|
|
|
class Order(BasicMixin):
|
|
__tablename__ = 'orders'
|
|
order_date = Column(String)
|
|
total_amount = Column(Float)
|
|
user_id = Column(Integer, ForeignKey('users.id'))
|
|
shipping_address_id = Column(Integer, ForeignKey('shipping_addresses.id'))
|
|
user = relationship("User", back_populates="orders")
|
|
shipping_address = relationship("ShippingAddress")
|
|
|
|
class User(BasicMixin):
|
|
__tablename__ = 'users'
|
|
username = Column(String, unique=True)
|
|
account_balance = Column(Float)
|
|
preferred_category_id = Column(Integer, ForeignKey('categories.id'))
|
|
last_ordered_product_id = Column(Integer, ForeignKey('products.id'))
|
|
supplier_rating_id = Column(Integer, ForeignKey('suppliers.id'))
|
|
preferred_category = relationship("Category")
|
|
last_ordered_product = relationship("Product")
|
|
supplier_rating = relationship("Supplier")
|
|
orders = relationship("Order", back_populates="user")
|