feat: add media supply billing center
This commit is contained in:
@@ -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
|
||||
);
|
||||
Reference in New Issue
Block a user