Automated Action c8aed27755 Create SaaS invoicing application with FastAPI and SQLite
- Set up project structure with modular organization
- Implement database models for users, organizations, clients, invoices
- Create Alembic migration scripts for database setup
- Implement JWT-based authentication and authorization
- Create API endpoints for users, organizations, clients, invoices
- Add PDF generation for invoices using ReportLab
- Add comprehensive documentation in README
2025-06-06 11:21:11 +00:00

86 lines
1.9 KiB
Python

from typing import List, Optional
from datetime import date
from pydantic import BaseModel
from app.models.invoice import InvoiceStatus
# Invoice Item schemas
class InvoiceItemBase(BaseModel):
description: Optional[str] = None
quantity: Optional[float] = None
unit_price: Optional[float] = None
amount: Optional[float] = None
class InvoiceItemCreate(InvoiceItemBase):
description: str
quantity: float
unit_price: float
amount: float
class InvoiceItemUpdate(InvoiceItemBase):
pass
class InvoiceItemInDBBase(InvoiceItemBase):
id: Optional[int] = None
invoice_id: int
class Config:
orm_mode = True
class InvoiceItem(InvoiceItemInDBBase):
pass
# Invoice schemas
class InvoiceBase(BaseModel):
invoice_number: Optional[str] = None
status: Optional[InvoiceStatus] = None
issue_date: Optional[date] = None
due_date: Optional[date] = None
subtotal: Optional[float] = None
tax_rate: Optional[float] = None
tax_amount: Optional[float] = None
discount: Optional[float] = None
total: Optional[float] = None
notes: Optional[str] = None
terms: Optional[str] = None
is_recurring: Optional[bool] = False
recurring_interval: Optional[str] = None
client_id: Optional[int] = None
organization_id: Optional[int] = None
class InvoiceCreate(InvoiceBase):
invoice_number: str
issue_date: date
due_date: date
subtotal: float
total: float
client_id: int
organization_id: int
items: List[InvoiceItemCreate]
class InvoiceUpdate(InvoiceBase):
items: Optional[List[InvoiceItemCreate]] = None
class InvoiceInDBBase(InvoiceBase):
id: Optional[int] = None
created_by_id: Optional[int] = None
class Config:
orm_mode = True
class Invoice(InvoiceInDBBase):
items: List[InvoiceItem] = []
class InvoiceInDB(InvoiceInDBBase):
pass