diff --git a/veza-backend-api/migrations/948_marketplace_complete_v0120.sql b/veza-backend-api/migrations/948_marketplace_complete_v0120.sql new file mode 100644 index 000000000..2bbd9fe77 --- /dev/null +++ b/veza-backend-api/migrations/948_marketplace_complete_v0120.sql @@ -0,0 +1,44 @@ +-- v0.12.0: Marketplace Complète (F226-F265) +-- Adds seller balances, payout scheduling, commission rate tracking + +-- Seller balances: tracks pending balance for each seller +CREATE TABLE IF NOT EXISTS seller_balances ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + seller_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, + available_cents BIGINT NOT NULL DEFAULT 0, + pending_cents BIGINT NOT NULL DEFAULT 0, + total_earned_cents BIGINT NOT NULL DEFAULT 0, + total_paid_out_cents BIGINT NOT NULL DEFAULT 0, + currency VARCHAR(3) NOT NULL DEFAULT 'EUR', + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + UNIQUE(seller_id, currency) +); + +CREATE INDEX IF NOT EXISTS idx_seller_balances_seller ON seller_balances(seller_id); + +-- Seller payouts: tracks scheduled and completed payouts +CREATE TABLE IF NOT EXISTS seller_payouts ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + seller_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, + amount_cents BIGINT NOT NULL, + currency VARCHAR(3) NOT NULL DEFAULT 'EUR', + status VARCHAR(50) NOT NULL DEFAULT 'pending', -- pending, processing, completed, failed + payout_method VARCHAR(50) NOT NULL DEFAULT 'stripe_connect', -- stripe_connect, paypal, bank_transfer + external_payout_id VARCHAR(255), + error_message TEXT, + scheduled_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + processed_at TIMESTAMPTZ, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +CREATE INDEX IF NOT EXISTS idx_seller_payouts_seller ON seller_payouts(seller_id); +CREATE INDEX IF NOT EXISTS idx_seller_payouts_status ON seller_payouts(status); + +-- Add commission_rate column to seller_transfers for per-sale tracking +ALTER TABLE seller_transfers ADD COLUMN IF NOT EXISTS commission_rate NUMERIC(5,4) DEFAULT 0.10; + +-- Add refund_deadline to orders for 14-day enforcement +ALTER TABLE orders ADD COLUMN IF NOT EXISTS refund_deadline TIMESTAMPTZ; + +-- Update existing completed orders to have a refund deadline of 14 days from creation +UPDATE orders SET refund_deadline = created_at + INTERVAL '14 days' WHERE status IN ('completed', 'paid') AND refund_deadline IS NULL; diff --git a/veza-backend-api/migrations/948_marketplace_complete_v0120_down.sql b/veza-backend-api/migrations/948_marketplace_complete_v0120_down.sql new file mode 100644 index 000000000..d955aabc7 --- /dev/null +++ b/veza-backend-api/migrations/948_marketplace_complete_v0120_down.sql @@ -0,0 +1,5 @@ +-- v0.12.0: Marketplace Complète rollback +ALTER TABLE orders DROP COLUMN IF EXISTS refund_deadline; +ALTER TABLE seller_transfers DROP COLUMN IF EXISTS commission_rate; +DROP TABLE IF EXISTS seller_payouts; +DROP TABLE IF EXISTS seller_balances;