mirror of
http://88.130.71.182:3000/BlitTech/deals24togo_be.git
synced 2026-06-12 23:33:21 +00:00
56 lines
2.3 KiB
SQL
56 lines
2.3 KiB
SQL
-- Migration 003: Payments, Subscriptions, Purchases
|
|
-- Run in Supabase SQL editor
|
|
|
|
-- Extend listings status to include 'sold'
|
|
ALTER TABLE listings
|
|
DROP CONSTRAINT IF EXISTS listings_status_check;
|
|
ALTER TABLE listings
|
|
ADD CONSTRAINT listings_status_check
|
|
CHECK (status IN ('pending', 'approved', 'rejected', 'sold'));
|
|
|
|
-- payments: one row per CinetPay transaction
|
|
CREATE TABLE payments (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
transaction_id TEXT UNIQUE NOT NULL,
|
|
type TEXT NOT NULL
|
|
CHECK (type IN ('subscription', 'purchase')),
|
|
payer_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
amount NUMERIC(12,2) NOT NULL,
|
|
currency TEXT NOT NULL DEFAULT 'XOF',
|
|
status TEXT NOT NULL DEFAULT 'pending'
|
|
CHECK (status IN ('pending', 'completed', 'failed', 'cancelled')),
|
|
payment_method TEXT,
|
|
operator_id TEXT,
|
|
metadata JSONB DEFAULT '{}'::JSONB,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
paid_at TIMESTAMPTZ
|
|
);
|
|
|
|
-- subscriptions: active plan per agency
|
|
CREATE TABLE subscriptions (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
agency_id UUID NOT NULL REFERENCES agencies(id) ON DELETE CASCADE,
|
|
plan TEXT NOT NULL CHECK (plan IN ('monthly', 'yearly')),
|
|
status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'expired')),
|
|
starts_at TIMESTAMPTZ NOT NULL,
|
|
ends_at TIMESTAMPTZ NOT NULL,
|
|
payment_id UUID REFERENCES payments(id),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- purchases: visitor buys a listing
|
|
CREATE TABLE purchases (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
listing_id UUID NOT NULL REFERENCES listings(id) ON DELETE CASCADE,
|
|
buyer_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
amount NUMERIC(12,2) NOT NULL,
|
|
payment_id UUID REFERENCES payments(id),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_payments_transaction_id ON payments(transaction_id);
|
|
CREATE INDEX idx_payments_payer_id ON payments(payer_id);
|
|
CREATE INDEX idx_subscriptions_agency_id ON subscriptions(agency_id);
|
|
CREATE INDEX idx_subscriptions_ends_at ON subscriptions(ends_at);
|
|
CREATE INDEX idx_purchases_listing_id ON purchases(listing_id);
|