Automated Action 4e60587fda Create simple inventory management app with FastAPI and SQLite
- 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
2025-06-17 03:54:50 +00:00

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")