Add database migrations

This commit is contained in:
Luis Eduardo Jeréz Girón
2024-07-20 00:24:20 -06:00
parent ea2926716d
commit 7775939a22
7 changed files with 153 additions and 0 deletions
@@ -0,0 +1,11 @@
-- +goose Up
-- +goose StatementBegin
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS pgcrypto;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP EXTENSION IF EXISTS "uuid-ossp";
DROP EXTENSION IF EXISTS pgcrypto;
-- +goose StatementEnd
@@ -0,0 +1,18 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE FUNCTION change_updated_at() RETURNS TRIGGER AS $$
BEGIN
IF row(NEW.*) IS DISTINCT FROM row(OLD.*) THEN
NEW.updated_at = now();
RETURN NEW;
ELSE
RETURN OLD;
END IF;
END;
$$ language 'plpgsql';
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP FUNCTION IF EXISTS change_updated_at();
-- +goose StatementEnd
@@ -0,0 +1,21 @@
-- +goose Up
-- +goose StatementBegin
CREATE TABLE IF NOT EXISTS users (
id UUID NOT NULL DEFAULT uuid_generate_v4() PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE CHECK (email = lower(email)),
password TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ
);
CREATE TRIGGER users_change_updated_at
BEFORE UPDATE ON users FOR EACH ROW EXECUTE FUNCTION change_updated_at();
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS users;
-- +goose StatementEnd
@@ -0,0 +1,20 @@
-- +goose Up
-- +goose StatementBegin
CREATE TABLE IF NOT EXISTS databases (
id UUID NOT NULL DEFAULT uuid_generate_v4() PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
connection_string TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ
);
CREATE TRIGGER databases_change_updated_at
BEFORE UPDATE ON databases FOR EACH ROW EXECUTE FUNCTION change_updated_at();
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS databases;
-- +goose StatementEnd
@@ -0,0 +1,24 @@
-- +goose Up
-- +goose StatementBegin
CREATE TABLE IF NOT EXISTS destinations (
id UUID NOT NULL DEFAULT uuid_generate_v4() PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
bucket_name TEXT NOT NULL,
access_key TEXT NOT NULL,
secret_key TEXT NOT NULL,
region TEXT NOT NULL,
endpoint TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ
);
CREATE TRIGGER destinations_change_updated_at
BEFORE UPDATE ON destinations FOR EACH ROW EXECUTE FUNCTION change_updated_at();
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS destinations;
-- +goose StatementEnd
@@ -0,0 +1,37 @@
-- +goose Up
-- +goose StatementBegin
CREATE TABLE IF NOT EXISTS backups (
id UUID NOT NULL DEFAULT uuid_generate_v4() PRIMARY KEY,
database_id UUID NOT NULL REFERENCES databases(id),
destination_id UUID NOT NULL REFERENCES destinations(id),
name TEXT NOT NULL,
cron_expression TEXT NOT NULL UNIQUE,
is_active BOOLEAN NOT NULL DEFAULT FALSE,
dest_dir TEXT NOT NULL,
opt_data_only BOOLEAN NOT NULL DEFAULT FALSE,
opt_schema_only BOOLEAN NOT NULL DEFAULT FALSE,
opt_clean BOOLEAN NOT NULL DEFAULT FALSE,
opt_if_exists BOOLEAN NOT NULL DEFAULT FALSE,
opt_create BOOLEAN NOT NULL DEFAULT FALSE,
opt_no_comments BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ
);
CREATE TRIGGER backups_change_updated_at
BEFORE UPDATE ON backups FOR EACH ROW EXECUTE FUNCTION change_updated_at();
CREATE INDEX IF NOT EXISTS
idx_backups_database_id ON backups(database_id);
CREATE INDEX IF NOT EXISTS
idx_backups_destination_id ON backups(destination_id);
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS backups;
-- +goose StatementEnd
@@ -0,0 +1,22 @@
-- +goose Up
-- +goose StatementBegin
CREATE TABLE IF NOT EXISTS executions (
id UUID NOT NULL DEFAULT uuid_generate_v4() PRIMARY KEY,
ok BOOLEAN NOT NULL,
message TEXT NOT NULL,
backup_uri TEXT,
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ,
finished_at TIMESTAMPTZ
);
CREATE TRIGGER executions_change_updated_at
BEFORE UPDATE ON executions FOR EACH ROW EXECUTE FUNCTION change_updated_at();
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS executions;
-- +goose StatementEnd