Yimaru-BackEnd/db/migrations/000009_payments.up.sql

36 lines
1.3 KiB
SQL

-- Payments table for tracking all payment transactions
CREATE TABLE payments (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
plan_id BIGINT REFERENCES subscription_plans(id) ON DELETE SET NULL,
subscription_id BIGINT REFERENCES user_subscriptions(id) ON DELETE SET NULL,
-- ArifPay specific fields
session_id VARCHAR(100),
transaction_id VARCHAR(100),
nonce VARCHAR(255) NOT NULL UNIQUE,
-- Payment details
amount DECIMAL(10, 2) NOT NULL,
currency VARCHAR(3) NOT NULL DEFAULT 'ETB',
payment_method VARCHAR(50),
-- Status tracking
status VARCHAR(20) NOT NULL DEFAULT 'PENDING' CHECK (status IN ('PENDING', 'PROCESSING', 'SUCCESS', 'FAILED', 'CANCELLED', 'EXPIRED')),
-- URLs for redirect
payment_url TEXT,
-- Timestamps
paid_at TIMESTAMPTZ,
expires_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ
);
CREATE INDEX idx_payments_user_id ON payments(user_id);
CREATE INDEX idx_payments_session_id ON payments(session_id);
CREATE INDEX idx_payments_nonce ON payments(nonce);
CREATE INDEX idx_payments_status ON payments(status);
CREATE INDEX idx_payments_subscription_id ON payments(subscription_id);