Files
member-console/internal/db/migrations/00001_init.sql

61 lines
1.9 KiB
PL/PgSQL

-- +goose Up
CREATE TABLE sites (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL DEFAULT 0,
domain TEXT UNIQUE NOT NULL,
is_custom_domain BOOLEAN NOT NULL DEFAULT FALSE,
owner_oidc_subject TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE payments (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL DEFAULT 0,
amount INTEGER NOT NULL,
currency TEXT NOT NULL DEFAULT 'USD',
status TEXT NOT NULL,
payment_processor_id TEXT UNIQUE,
paid_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_sites_user_id ON sites(user_id);
CREATE INDEX idx_payments_user_id ON payments(user_id);
CREATE INDEX idx_sites_domain ON sites(domain);
CREATE INDEX idx_sites_owner_oidc_subject ON sites(owner_oidc_subject);
CREATE INDEX idx_payments_payment_processor_id ON payments(payment_processor_id);
-- +goose StatementBegin
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- +goose StatementEnd
CREATE TRIGGER trigger_sites_updated_at
BEFORE UPDATE ON sites
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
CREATE TRIGGER trigger_payments_updated_at
BEFORE UPDATE ON payments
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
-- +goose Down
DROP TRIGGER IF EXISTS trigger_payments_updated_at ON payments;
DROP TRIGGER IF EXISTS trigger_sites_updated_at ON sites;
DROP FUNCTION IF EXISTS update_updated_at_column();
DROP INDEX IF EXISTS idx_payments_payment_processor_id;
DROP INDEX IF EXISTS idx_sites_owner_oidc_subject;
DROP INDEX IF EXISTS idx_sites_domain;
DROP INDEX IF EXISTS idx_payments_user_id;
DROP INDEX IF EXISTS idx_sites_user_id;
DROP TABLE IF EXISTS payments;
DROP TABLE IF EXISTS sites;