aboutsummaryrefslogtreecommitdiff
path: root/inventory-service/app/models
diff options
context:
space:
mode:
authoralex <[email protected]>2026-07-17 18:16:35 +0200
committeralex <[email protected]>2026-07-17 18:16:35 +0200
commit8e796c9cfcd65f6225a6ae3ec2a4419f265b0ebc (patch)
tree1bf90385144be2e9f350c31da553b1ac306ee60b /inventory-service/app/models
parent5f6918db393ed78dd8f038e9e5f1ea85f811dc52 (diff)
downloadorder-inventory-system-8e796c9cfcd65f6225a6ae3ec2a4419f265b0ebc.tar.xz
order-inventory-system-8e796c9cfcd65f6225a6ae3ec2a4419f265b0ebc.zip
inventory-service initHEADmain
Diffstat (limited to 'inventory-service/app/models')
-rw-r--r--inventory-service/app/models/inventory.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/inventory-service/app/models/inventory.py b/inventory-service/app/models/inventory.py
new file mode 100644
index 0000000..531d1ec
--- /dev/null
+++ b/inventory-service/app/models/inventory.py
@@ -0,0 +1,60 @@
+from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, UniqueConstraint
+from sqlalchemy.orm import relationship
+from sqlalchemy.sql import func
+from app.core.database import Base
+
+
+class Product(Base):
+ __tablename__ = "products"
+
+ id = Column(Integer, primary_key=True, index=True)
+ name = Column(String(255), nullable=False)
+ sku = Column(String(100), unique=True, nullable=False, index=True)
+ quantity_in_stock = Column(Integer, nullable=False, default=0)
+
+ created_at = Column(
+ DateTime(timezone=True), server_default=func.now(), nullable=False
+ )
+ updated_at = Column(
+ DateTime(timezone=True),
+ server_default=func.now(),
+ onupdate=func.now(),
+ nullable=False,
+ )
+
+ stock_movements = relationship(
+ "StockMovement", back_populates="product", cascade="all, delete-orphan"
+ )
+
+
+class StockMovement(Base):
+ __tablename__ = "stock_movements"
+
+ id = Column(Integer, primary_key=True, index=True)
+ product_id = Column(
+ Integer,
+ ForeignKey("products.id", ondelete="CASCADE"),
+ nullable=False,
+ index=True,
+ )
+ order_id = Column(Integer, nullable=False, index=True)
+
+ movement_type = Column(String(50), nullable=False)
+ quantity_change = Column(Integer, nullable=False)
+
+ created_at = Column(
+ DateTime(timezone=True), server_default=func.now(), nullable=False
+ )
+
+ product = relationship("Product", back_populates="stock_movements")
+
+
+class ProcessedEvent(Base):
+ __tablename__ = "processed_events"
+
+ id = Column(Integer, primary_key=True, index=True)
+ order_id = Column(Integer, unique=True, nullable=False, index=True)
+
+ processed_at = Column(
+ DateTime(timezone=True), server_default=func.now(), nullable=False
+ )