Automated Action 0fc3927871 Build comprehensive SaaS invoicing application with FastAPI
- Implemented complete authentication system with JWT tokens
- Created user management with registration and profile endpoints
- Built client management with full CRUD operations
- Developed invoice system with line items and automatic calculations
- Set up SQLite database with proper migrations using Alembic
- Added health monitoring and API documentation
- Configured CORS for cross-origin requests
- Included comprehensive README with usage examples
2025-06-23 14:56:50 +00:00

35 lines
1.4 KiB
Python

from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Float, Text, Enum
from sqlalchemy.orm import relationship
from datetime import datetime
from enum import Enum as PyEnum
from app.db.base import Base
class InvoiceStatus(PyEnum):
DRAFT = "draft"
SENT = "sent"
PAID = "paid"
OVERDUE = "overdue"
CANCELLED = "cancelled"
class Invoice(Base):
__tablename__ = "invoices"
id = Column(Integer, primary_key=True, index=True)
invoice_number = Column(String, unique=True, nullable=False, index=True)
client_id = Column(Integer, ForeignKey("clients.id"), nullable=False)
owner_id = Column(Integer, ForeignKey("users.id"), nullable=False)
issue_date = Column(DateTime, default=datetime.utcnow)
due_date = Column(DateTime, nullable=False)
subtotal = Column(Float, default=0.0)
tax_rate = Column(Float, default=0.0)
tax_amount = Column(Float, default=0.0)
total_amount = Column(Float, default=0.0)
status = Column(Enum(InvoiceStatus), default=InvoiceStatus.DRAFT)
notes = Column(Text)
payment_terms = Column(String, default="Net 30")
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
client = relationship("Client", back_populates="invoices")
owner = relationship("User", back_populates="invoices")
items = relationship("InvoiceItem", back_populates="invoice", cascade="all, delete-orphan")