Automated Action b51b13eb3e Create backend scaffold for freelancer invoicing API
- Set up FastAPI application with CORS support
- Configure SQLite database connection
- Create database models for users, clients, invoices, and line items
- Set up Alembic for database migrations
- Implement JWT-based authentication system
- Create basic CRUD endpoints for users, clients, and invoices
- Add PDF generation functionality
- Implement activity logging
- Update README with project information
2025-05-26 18:21:20 +00:00

69 lines
1.4 KiB
Python

from pydantic import BaseModel, Field
from typing import Optional, List
from datetime import date
from app.models.invoice import InvoiceStatus
class InvoiceItemBase(BaseModel):
description: str
quantity: float = Field(..., gt=0)
unit_price: float = Field(..., ge=0)
class InvoiceItemCreate(InvoiceItemBase):
pass
class InvoiceItemUpdate(InvoiceItemBase):
description: Optional[str] = None
quantity: Optional[float] = Field(None, gt=0)
unit_price: Optional[float] = Field(None, ge=0)
class InvoiceItemInDBBase(InvoiceItemBase):
id: str
invoice_id: str
class Config:
from_attributes = True
class InvoiceItem(InvoiceItemInDBBase):
pass
class InvoiceBase(BaseModel):
invoice_number: str
status: InvoiceStatus = InvoiceStatus.DRAFT
issued_date: date
due_date: date
notes: Optional[str] = None
client_id: str
class InvoiceCreate(InvoiceBase):
items: List[InvoiceItemCreate]
class InvoiceUpdate(BaseModel):
invoice_number: Optional[str] = None
status: Optional[InvoiceStatus] = None
issued_date: Optional[date] = None
due_date: Optional[date] = None
notes: Optional[str] = None
client_id: Optional[str] = None
class InvoiceInDBBase(InvoiceBase):
id: str
user_id: str
created_at: date
updated_at: date
class Config:
from_attributes = True
class Invoice(InvoiceInDBBase):
items: List[InvoiceItem] = []
total: float = 0.0