Automated Action bad5cc0eba Build complete SaaS invoicing application with FastAPI
Features:
- JWT authentication with user registration and login
- Customer management with full CRUD operations
- Invoice management with automatic calculations
- Multi-tenant data isolation by user
- SQLite database with Alembic migrations
- RESTful API with comprehensive documentation
- Tax calculations and invoice status tracking
- Code formatted with Ruff linting
2025-06-20 09:52:34 +00:00

80 lines
1.6 KiB
Python

from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime
from decimal import Decimal
from app.models.invoice import InvoiceStatus
class InvoiceItemBase(BaseModel):
description: str
quantity: Decimal
unit_price: Decimal
class InvoiceItemCreate(InvoiceItemBase):
pass
class InvoiceItemUpdate(BaseModel):
description: Optional[str] = None
quantity: Optional[Decimal] = None
unit_price: Optional[Decimal] = None
class InvoiceItemInDB(InvoiceItemBase):
id: int
invoice_id: int
total_price: Decimal
created_at: datetime
class Config:
from_attributes = True
class InvoiceItem(InvoiceItemInDB):
pass
class InvoiceBase(BaseModel):
customer_id: int
due_date: datetime
tax_rate: Optional[Decimal] = Decimal("0")
notes: Optional[str] = None
class InvoiceCreate(InvoiceBase):
items: List[InvoiceItemCreate]
class InvoiceUpdate(BaseModel):
customer_id: Optional[int] = None
due_date: Optional[datetime] = None
status: Optional[InvoiceStatus] = None
tax_rate: Optional[Decimal] = None
notes: Optional[str] = None
items: Optional[List[InvoiceItemCreate]] = None
class InvoiceInDB(InvoiceBase):
id: int
invoice_number: str
user_id: int
issue_date: datetime
status: InvoiceStatus
subtotal: Decimal
tax_amount: Decimal
total: Decimal
created_at: datetime
updated_at: Optional[datetime] = None
class Config:
from_attributes = True
class Invoice(InvoiceInDB):
items: List[InvoiceItem] = []
class InvoiceWithCustomer(Invoice):
customer: Optional[dict] = None