* feat: add "book directly" functionality for invoice inbox items - Extend JournalEntrySourceTypeSchema to include 'inbox_item'. - Introduce BookInboxItemDirectlySchema for direct journal entry creation. - Update InvoiceInboxItem type to include matched_transaction_id and created_journal_entry_id. - Implement BookDirectlyDialog component for user interaction. - Create API route for booking directly from inbox items with appropriate validations. - Add SQL migration to support new journal entry references in the invoice inbox items table. - Implement tests for the new booking functionality and ensure proper error handling. * fix(invoice-inbox): update status handling for resolved inbox items * feat: enforce unique journal entry constraint for invoice inbox items
18 lines
745 B
SQL
18 lines
745 B
SQL
-- Invoice inbox: enforce one journal entry per inbox item.
|
|
--
|
|
-- The book-direct route does a check-then-write (409 guard on
|
|
-- created_journal_entry_id, then createJournalEntry, then update).
|
|
-- Without a UNIQUE constraint, two concurrent calls for the same
|
|
-- inbox item can both pass the guard, both insert a journal entry,
|
|
-- and the second update overwrites the FK — orphaning the first
|
|
-- entry in an immutable ledger with no inbox reference.
|
|
--
|
|
-- PostgreSQL treats NULLs as distinct in UNIQUE constraints by
|
|
-- default, so unbooked items (NULL) remain unconstrained.
|
|
|
|
ALTER TABLE public.invoice_inbox_items
|
|
ADD CONSTRAINT invoice_inbox_items_journal_entry_unique
|
|
UNIQUE (created_journal_entry_id);
|
|
|
|
NOTIFY pgrst, 'reload schema';
|