add FastAPI

This commit is contained in:
2025-01-25 15:53:37 -03:00
commit b73d27de57
49 changed files with 3521 additions and 0 deletions

277
db/models.py Normal file
View File

@@ -0,0 +1,277 @@
import datetime
from sqlalchemy import Column, String, Integer, Float, Date, DateTime, Boolean, ForeignKey, JSON
from sqlalchemy.orm import relationship, DeclarativeBase, Mapped, mapped_column
from sqlalchemy.sql import func
class Base(DeclarativeBase):
pass
class ApiToken(Base):
__tablename__ = 'api_token'
id = Column(Integer, primary_key=True, autoincrement=True)
message = Column(String(255))
code = Column(Integer)
access_token = Column(String(255))
refresh_token = Column(String(255))
date_expiration_access_token = Column(DateTime)
date_expiration_refresh_token = Column(DateTime)
date_activated = Column(DateTime)
api_host = Column(String(255))
store_id = Column(String(255))
def __init__(self, message, code, access_token, refresh_token, date_expiration_access_token,
date_expiration_refresh_token, date_activated, api_host, store_id):
self.message = message
self.code = code
self.access_token = access_token
self.refresh_token = refresh_token
self.date_expiration_access_token = datetime.datetime.strptime(date_expiration_access_token,
"%Y-%m-%d %H:%M:%S")
self.date_expiration_refresh_token = datetime.datetime.strptime(date_expiration_refresh_token,
"%Y-%m-%d %H:%M:%S")
self.date_activated = datetime.datetime.strptime(date_activated, "%Y-%m-%d %H:%M:%S")
self.api_host = api_host
self.store_id = store_id
class Order(Base):
__tablename__ = 'order'
id: Mapped[int] = mapped_column(primary_key=True)
status: Mapped[str] = mapped_column(String(255))
date: Mapped[datetime] = mapped_column(Date)
customer_id: Mapped[int] = mapped_column(Integer)
partial_total: Mapped[float] = mapped_column(Float)
taxes: Mapped[float] = mapped_column(Float)
discount: Mapped[float] = mapped_column(Float)
point_sale: Mapped[str] = mapped_column(String(100))
shipment: Mapped[str] = mapped_column(String)
shipment_value: Mapped[float] = mapped_column(Float)
shipment_date: Mapped[datetime] = mapped_column(Date, nullable=True)
store_note: Mapped[str] = mapped_column(String)
discount_coupon: Mapped[str] = mapped_column(String(255))
payment_method_rate: Mapped[float] = mapped_column(Float)
value_1: Mapped[float] = mapped_column(Float)
payment_form: Mapped[str] = mapped_column(String(255))
sending_code: Mapped[str] = mapped_column(String(255))
session_id: Mapped[str] = mapped_column(String(255))
total: Mapped[float] = mapped_column(Float)
payment_date: Mapped[datetime] = mapped_column(Date, nullable=True)
access_code: Mapped[str] = mapped_column(String(255), nullable=True)
progressive_discount: Mapped[float] = mapped_column(Float, nullable=True)
shipping_progressive_discount: Mapped[float] = mapped_column(Float, nullable=True)
shipment_integrator: Mapped[str] = mapped_column(String(255))
modified: Mapped[datetime] = mapped_column(DateTime)
printed: Mapped[bool] = mapped_column(Boolean, default=False)
interest: Mapped[float] = mapped_column(Float)
cart_additional_values_discount: Mapped[float] = mapped_column(Float)
cart_additional_values_increase: Mapped[float] = mapped_column(Float)
id_quotation: Mapped[str] = mapped_column(String(255))
estimated_delivery_date: Mapped[datetime] = mapped_column(Date, nullable=True)
external_code: Mapped[str] = mapped_column(String(255))
tracking_url: Mapped[str] = mapped_column(String(255))
has_payment: Mapped[bool] = mapped_column(Boolean, default=False)
has_shipment: Mapped[bool] = mapped_column(Boolean, default=False)
has_invoice: Mapped[bool] = mapped_column(Boolean, default=False)
total_comission_user: Mapped[float] = mapped_column(Float)
total_comission: Mapped[float] = mapped_column(Float)
is_traceable: Mapped[bool] = mapped_column(Boolean, default=False)
audit_create_ts: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
order_status_id: Mapped[int] = mapped_column(Integer, ForeignKey("order_status.id"), nullable=True)
order_status: Mapped["OrderStatus"] = relationship("OrderStatus", foreign_keys=[order_status_id])
# products_sold = relationship('ProductsSold', backref='order')
# payment = relationship('Payment', backref='order')
class OrderStatus(Base):
__tablename__ = 'order_status'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
default: Mapped[bool] = mapped_column(Boolean, default=False)
type: Mapped[str] = mapped_column(String(255))
show_backoffice: Mapped[bool] = mapped_column(Boolean, default=False)
allow_edit_order: Mapped[bool] = mapped_column(Boolean, default=False)
description: Mapped[str] = mapped_column(String)
status: Mapped[str] = mapped_column(String(255))
show_status_central: Mapped[str] = mapped_column(String(255), default="")
background: Mapped[str] = mapped_column(String(7))
display_name: Mapped[str] = mapped_column(String(255), nullable=True)
font_color: Mapped[str] = mapped_column(String(7), nullable=True)
audit_create_ts: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
class Product(Base):
__tablename__ = 'product'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
modified: Mapped[datetime] = mapped_column(DateTime)
ean: Mapped[str] = mapped_column(String)
is_kit: Mapped[bool] = mapped_column(Boolean)
slug: Mapped[str] = mapped_column(String)
ncm: Mapped[str] = mapped_column(String)
activation_date: Mapped[datetime] = mapped_column(DateTime, nullable=True)
deactivation_date: Mapped[datetime] = mapped_column(DateTime, nullable=True)
name: Mapped[str] = mapped_column(String)
price: Mapped[float] = mapped_column(Float)
cost_price: Mapped[float] = mapped_column(Float)
dollar_cost_price: Mapped[float] = mapped_column(Float)
promotional_price: Mapped[float] = mapped_column(Float)
start_promotion: Mapped[datetime] = mapped_column(DateTime, nullable=True)
end_promotion: Mapped[datetime] = mapped_column(DateTime, nullable=True)
brand: Mapped[str] = mapped_column(String)
brand_id: Mapped[str] = mapped_column(String)
model: Mapped[str] = mapped_column(String)
weight: Mapped[float] = mapped_column(Float)
length: Mapped[float] = mapped_column(Float)
width: Mapped[float] = mapped_column(Float)
height: Mapped[float] = mapped_column(Float)
stock: Mapped[int] = mapped_column(Integer)
category_id: Mapped[int] = mapped_column(Integer)
available: Mapped[bool] = mapped_column(Boolean)
availability: Mapped[str] = mapped_column(String)
reference: Mapped[str] = mapped_column(String)
hot: Mapped[bool] = mapped_column(Boolean)
release: Mapped[bool] = mapped_column(Boolean)
additional_button: Mapped[bool] = mapped_column(Boolean)
has_variation: Mapped[bool] = mapped_column(Boolean)
rating: Mapped[float] = mapped_column(Float)
count_rating: Mapped[int] = mapped_column(Integer)
quantity_sold: Mapped[int] = mapped_column(Integer)
url = Column(JSON)
created: Mapped[datetime] = mapped_column(DateTime)
payment_option: Mapped[str] = mapped_column(String)
payment_option_details = Column(JSON) # TODO: update to relation
related_categories = Column(JSON) # TODO: update to relation
release_date: Mapped[datetime] = mapped_column(DateTime, nullable=True)
shortcut: Mapped[str] = mapped_column(String)
virtual_product: Mapped[str] = mapped_column(String)
minimum_stock: Mapped[int] = mapped_column(Integer)
minimum_stock_alert: Mapped[bool] = mapped_column(Boolean)
free_shipping: Mapped[bool] = mapped_column(Boolean)
video: Mapped[str] = mapped_column(String)
metatag = Column(JSON) # Assuming this might be a list, hence JSON
payment_option_html: Mapped[str] = mapped_column(String)
upon_request: Mapped[bool] = mapped_column(Boolean)
available_for_purchase: Mapped[bool] = mapped_column(Boolean)
all_categories: Mapped[str] = mapped_column(String(), nullable=True)
product_image = Column(JSON) # Assuming this might be a list, hence JSON
variant = Column(JSON) # TODO: update to relation
additional_infos = Column(JSON) # Assuming this might be a list, hence JSON
audit_create_ts: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
class Category(Base):
__tablename__ = 'category'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
parent_id: Mapped[int] = mapped_column(Integer, ForeignKey('category.id'), nullable=True)
name: Mapped[str] = mapped_column(String)
small_description: Mapped[str] = mapped_column(String)
images: Mapped[str] = mapped_column(JSON)
audit_create_ts: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
class ProductsSold(Base):
__tablename__ = 'products_sold'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
product_id: Mapped[int] = mapped_column(Integer, nullable=False)
order_id: Mapped[int] = mapped_column(Integer, ForeignKey('order.id'), nullable=False)
name: Mapped[str] = mapped_column(String)
price: Mapped[float] = mapped_column(Float)
original_price: Mapped[float] = mapped_column(Float)
quantity: Mapped[int] = mapped_column(Integer)
model: Mapped[str] = mapped_column(String)
reference: Mapped[str] = mapped_column(String)
variant_id: Mapped[int] = mapped_column(Integer)
additional_information: Mapped[str] = mapped_column(String)
audit_create_ts: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
class OrderProductsSold(Base):
__tablename__ = 'order_products_sold'
order_id: Mapped[int] = mapped_column(Integer, primary_key=True)
products_sold_id: Mapped[int] = mapped_column(Integer, primary_key=True)
audit_create_ts: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
#
#
# class PropertyValue(Base):
# __tablename__ = 'property_value'
#
# id = Column(Integer, primary_key=True)
# name = Column(String)
# property_id = Column(Integer, ForeignKey('property.id'))
# image = Column(JSON) # Assuming image has both HTTP and HTTPS links
#
# # Relationship to Property
# property = relationship("Property", backref=backref("PropertyValue", cascade="all, delete-orphan"))
#
#
# class Property(Base):
# __tablename__ = 'property'
#
# id = Column(Integer, primary_key=True)
# active_display = Column(Boolean)
# name = Column(String)
# position = Column(Integer)
# display = Column(Boolean)
# has_product = Column(Boolean)
#
# # Relationship to PropertyValues
# PropertyValue = relationship("PropertyValue", backref="property")
#
#
#
#
#
#
# class Variant(Base):
# __tablename__ = 'variant'
#
# id = Column(Integer, primary_key=True)
# ean = Column(String)
# order = Column(Integer)
# product_id = Column(Integer, nullable=False)
# price = Column(Float)
# cost_price = Column(Float)
# stock = Column(Integer)
# minimum_stock = Column(Integer)
# reference = Column(String)
# weight = Column(Float)
# length = Column(Float)
# width = Column(Float)
# height = Column(Float)
# start_promotion = Column(DateTime)
# end_promotion = Column(DateTime)
# promotional_price = Column(Float)
# payment_option = Column(String)
# payment_option_details = Column(JSON) # JSON to store payment_option_details
# available = Column(Boolean)
# illustrative_image = Column(JSON) # JSON to store illustrative image URLs
# quantity_sold = Column(Integer)
# color_id_1 = Column(Integer)
# color_id_2 = Column(Integer)
# cubic_weight = Column(Float)
#
# # Relationships
# skus = relationship('Sku', backref='variant', cascade='all, delete-orphan')
# variant_images = relationship('VariantImage', backref='variant', cascade='all, delete-orphan')
#
# class Payment(Base):
# __tablename__ = 'payment'
#
# id = Column(Integer, primary_key=True)
# order_id = Column(Integer, ForeignKey('order.id'))