diff options
Diffstat (limited to 'inventory-service/app/models/inventory.py')
| -rw-r--r-- | inventory-service/app/models/inventory.py | 60 |
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 + ) |
