feat: add media supply billing center
Frontend CI / Frontend (push) Successful in 5m44s
Backend CI / Backend (push) Failing after 6m58s

This commit is contained in:
2026-06-29 23:13:33 +08:00
parent 4040d22605
commit 31811b07d4
16 changed files with 926 additions and 12 deletions
@@ -0,0 +1,5 @@
ALTER TABLE media_supply_wallet_ledgers
DROP CONSTRAINT IF EXISTS chk_media_supply_wallet_ledger_fact_non_negative,
DROP COLUMN IF EXISTS gross_profit_cents,
DROP COLUMN IF EXISTS cost_cents,
DROP COLUMN IF EXISTS sales_cents;
@@ -0,0 +1,34 @@
ALTER TABLE media_supply_wallet_ledgers
ADD COLUMN IF NOT EXISTS sales_cents BIGINT NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS cost_cents BIGINT NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS gross_profit_cents BIGINT NOT NULL DEFAULT 0;
UPDATE media_supply_wallet_ledgers l
SET sales_cents = CASE
WHEN l.reason = 'order_debit' THEN o.sell_total_cents
WHEN l.reason = 'order_refund' THEN -o.sell_total_cents
ELSE 0
END,
cost_cents = CASE
WHEN l.reason = 'order_debit' THEN o.cost_total_cents
WHEN l.reason = 'order_refund' THEN -o.cost_total_cents
ELSE 0
END,
gross_profit_cents = CASE
WHEN l.reason = 'order_debit' THEN o.sell_total_cents - o.cost_total_cents
WHEN l.reason = 'order_refund' THEN -(o.sell_total_cents - o.cost_total_cents)
ELSE 0
END
FROM media_supply_orders o
WHERE l.order_id = o.id
AND l.reason IN ('order_debit', 'order_refund');
ALTER TABLE media_supply_wallet_ledgers
ADD CONSTRAINT chk_media_supply_wallet_ledger_fact_non_negative
CHECK (
reason = 'order_refund'
OR (sales_cents >= 0 AND cost_cents >= 0 AND gross_profit_cents >= 0)
) NOT VALID;
ALTER TABLE media_supply_wallet_ledgers
VALIDATE CONSTRAINT chk_media_supply_wallet_ledger_fact_non_negative;
@@ -0,0 +1 @@
DROP INDEX CONCURRENTLY IF EXISTS idx_media_supply_wallet_ledgers_created_id;
@@ -0,0 +1,12 @@
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_media_supply_wallet_ledgers_created_id
ON media_supply_wallet_ledgers (created_at DESC, id DESC)
INCLUDE (
tenant_id,
user_id,
order_id,
reason,
delta_cents,
sales_cents,
cost_cents,
gross_profit_cents
);
@@ -0,0 +1 @@
DROP INDEX CONCURRENTLY IF EXISTS idx_media_supply_wallet_ledgers_tenant_created;
@@ -0,0 +1,11 @@
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_media_supply_wallet_ledgers_tenant_created
ON media_supply_wallet_ledgers (tenant_id, created_at DESC, id DESC)
INCLUDE (
user_id,
order_id,
reason,
delta_cents,
sales_cents,
cost_cents,
gross_profit_cents
);
@@ -0,0 +1 @@
DROP INDEX CONCURRENTLY IF EXISTS idx_media_supply_wallet_ledgers_tenant_user_created_cover;
@@ -0,0 +1,10 @@
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_media_supply_wallet_ledgers_tenant_user_created_cover
ON media_supply_wallet_ledgers (tenant_id, user_id, created_at DESC, id DESC)
INCLUDE (
order_id,
reason,
delta_cents,
sales_cents,
cost_cents,
gross_profit_cents
);
@@ -0,0 +1 @@
DROP INDEX CONCURRENTLY IF EXISTS idx_media_supply_wallet_ledgers_reason_created;
@@ -0,0 +1,11 @@
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_media_supply_wallet_ledgers_reason_created
ON media_supply_wallet_ledgers (reason, created_at DESC, id DESC)
INCLUDE (
tenant_id,
user_id,
order_id,
delta_cents,
sales_cents,
cost_cents,
gross_profit_cents
);