
- Set up project structure with FastAPI - Implement SQLAlchemy models for inventory items and categories - Create database connection with SQLite - Add CRUD operations for inventory management - Implement API endpoints for categories, items, and inventory transactions - Add health check endpoint - Set up Alembic for database migrations - Update README with documentation
56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Text
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.sql import func
|
|
|
|
from app.db.base import Base
|
|
|
|
|
|
class Category(Base):
|
|
"""
|
|
Model for item categories in inventory
|
|
"""
|
|
__tablename__ = "categories"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
name = Column(String, unique=True, index=True, nullable=False)
|
|
description = Column(Text, nullable=True)
|
|
|
|
# Relationships
|
|
items = relationship("Item", back_populates="category")
|
|
|
|
|
|
class Item(Base):
|
|
"""
|
|
Model for inventory items
|
|
"""
|
|
__tablename__ = "items"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
name = Column(String, index=True, nullable=False)
|
|
description = Column(Text, nullable=True)
|
|
quantity = Column(Integer, default=0, nullable=False)
|
|
price = Column(Float, nullable=True)
|
|
sku = Column(String, unique=True, index=True, nullable=True)
|
|
category_id = Column(Integer, ForeignKey("categories.id"), nullable=True)
|
|
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)
|
|
|
|
# Relationships
|
|
category = relationship("Category", back_populates="items")
|
|
|
|
|
|
class InventoryTransaction(Base):
|
|
"""
|
|
Model for tracking inventory transactions (additions/removals)
|
|
"""
|
|
__tablename__ = "inventory_transactions"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
item_id = Column(Integer, ForeignKey("items.id"), nullable=False)
|
|
quantity_change = Column(Integer, nullable=False) # Positive for additions, negative for removals
|
|
transaction_type = Column(String, nullable=False) # "addition", "removal", "adjustment"
|
|
notes = Column(Text, nullable=True)
|
|
timestamp = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
|
|
|
|
# Relationships
|
|
item = relationship("Item") |