36 lines
1.3 KiB
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);
|