Files
cloud-host/backend/helm/cloudhost-platform/migrations/010_invoices.sql
T
keyhan bf9e827f85 Add cloudhost-platform Helm chart and registry ingress manifests.
Deploy backend, frontend, PostgreSQL, and Redis on Kubernetes with optional Ingress/TLS, SQL migration hooks, and public registry exposure at repo.3fase.ir.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-24 19:01:05 +03:30

53 lines
1.8 KiB
SQL

CREATE TABLE IF NOT EXISTS invoices (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
"invoiceNumber" VARCHAR NOT NULL UNIQUE,
"userId" UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
"applicationId" UUID REFERENCES applications(id) ON DELETE SET NULL,
reason VARCHAR NOT NULL DEFAULT 'manual',
status VARCHAR NOT NULL DEFAULT 'issued',
"paymentMethod" VARCHAR,
subtotal DECIMAL(14, 2) NOT NULL DEFAULT 0,
total DECIMAL(14, 2) NOT NULL DEFAULT 0,
"paidAmount" DECIMAL(14, 2) NOT NULL DEFAULT 0,
"dueAmount" DECIMAL(14, 2) NOT NULL DEFAULT 0,
"dueDate" TIMESTAMPTZ,
"paidAt" TIMESTAMPTZ,
"gatewayTrackingCode" VARCHAR,
"gatewayReference" VARCHAR,
"adminNote" VARCHAR,
"statusReason" VARCHAR,
metadata JSONB,
"createdAt" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
"updatedAt" TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS invoice_lines (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
"invoiceId" UUID NOT NULL REFERENCES invoices(id) ON DELETE CASCADE,
label VARCHAR NOT NULL,
description VARCHAR,
quantity INT NOT NULL DEFAULT 1,
"unitAmount" DECIMAL(14, 2) NOT NULL DEFAULT 0,
amount DECIMAL(14, 2) NOT NULL DEFAULT 0,
metadata JSONB,
"createdAt" TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
ALTER TABLE wallet_transactions
ADD COLUMN IF NOT EXISTS "invoiceId" UUID REFERENCES invoices(id) ON DELETE SET NULL;
ALTER TABLE wallet_transactions
ADD COLUMN IF NOT EXISTS "gatewayTrackingCode" VARCHAR;
CREATE INDEX IF NOT EXISTS idx_invoices_user_status_created
ON invoices ("userId", status, "createdAt" DESC);
CREATE INDEX IF NOT EXISTS idx_invoices_application
ON invoices ("applicationId");
CREATE INDEX IF NOT EXISTS idx_invoice_lines_invoice
ON invoice_lines ("invoiceId");
CREATE INDEX IF NOT EXISTS idx_wallet_transactions_invoice
ON wallet_transactions ("invoiceId");