Files
backend/database/migrations/058_invoice_user_id.sql
Alireza HassaniandCursor 5734a73c9c Add business-scoped invoices billed to users.
Introduce invoices.user_id, business template/invoice APIs, and tenant-domain public URLs so business dashboards can issue invoices without platform-scope template mismatches.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 15:17:03 +03:30

47 lines
1.2 KiB
SQL

-- Invoices bill a User (not a Business). business_id remains tenant/context.
ALTER TABLE invoices
ADD COLUMN IF NOT EXISTS user_id BIGINT;
-- Backfill: business owner, else any business_users row for that business
UPDATE invoices i
SET user_id = COALESCE(
(
SELECT bu.user_id
FROM business_users bu
WHERE bu.business_id = i.business_id
AND bu.is_owner = TRUE
ORDER BY bu.user_id
LIMIT 1
),
(
SELECT bu.user_id
FROM business_users bu
WHERE bu.business_id = i.business_id
ORDER BY bu.user_id
LIMIT 1
)
)
WHERE i.user_id IS NULL;
-- Drop any invoices that still have no resolvable user (orphan businesses)
DELETE FROM invoices WHERE user_id IS NULL;
ALTER TABLE invoices
ALTER COLUMN user_id SET NOT NULL;
DO $$ BEGIN
ALTER TABLE invoices
ADD CONSTRAINT invoices_user_id_fkey
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE RESTRICT;
EXCEPTION
WHEN duplicate_object THEN NULL;
END $$;
CREATE INDEX IF NOT EXISTS idx_invoices_user_created
ON invoices (user_id, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_invoices_issuer_business_created
ON invoices (issuer_business_id, created_at DESC)
WHERE issuer_business_id IS NOT NULL;