Version 1 (modified by 8 days ago) ( diff ) | ,
---|
### Transactions
The application uses database transactions in several key operations:
- Invoice creation: When creating a new invoice, a transaction ensures that both the invoice and its items are created atomically
- Status updates: Invoice status changes are handled within transactions to maintain data consistency
- Client updates: When updating client information, related operations are wrapped in transactions
Transactions are implemented in the following files:
src/app/api/invoices/[id]/route.ts
: For updating and deleting invoicessrc/app/api/invoices/route.ts
: For creating new invoices
### Triggers
The system implements a sophisticated trigger system for invoice management:
invoice_status_update_trigger
: Automatically fires when an invoice status changes- Logs status changes in
InvoiceStatusHistory
- Creates notifications in
InvoiceNotifications
- Updates client status based on payment history
- Automatically extends due dates when needed
- Calculates and updates financial metrics
- Logs status changes in
The trigger is implemented in sql/01_invoice_status_trigger.sql
.
### Indexes
Several optimized indexes are implemented for better query performance:
- Client email lookups:
idx_client_email
: Basic email search optimizationidx_client_email_tenant
: Composite index for tenant-specific email searchesidx_client_email_lower
: Case-insensitive email searches
- Invoice management:
idx_invoice_status_history_invoice_id
: Optimizes status history lookupsidx_invoice_status_history_changed_at
: Improves date-based queriesidx_invoice_notifications_invoice_id
: Speeds up notification retrievalidx_invoice_notifications_processed
: Partial index for unprocessed notifications
Attachments (1)
- index.jpg (196.4 KB ) - added by 4 days ago.
Download all attachments as: .zip
Note:
See TracWiki
for help on using the wiki.