-- 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);