From aaa1eff0fe33c97bd66f72834ca922b5204f0471 Mon Sep 17 00:00:00 2001 From: Vojtech Mares Date: Thu, 10 Oct 2024 21:29:55 +0200 Subject: [PATCH] feat: add database migrations and dockerfile for migrations --- build/package/migrations/Dockerfile | 10 ++++++++++ db/migrations/0001_training.down.sql | 5 +++++ db/migrations/0001_training.up.sql | 25 +++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 build/package/migrations/Dockerfile create mode 100644 db/migrations/0001_training.down.sql create mode 100644 db/migrations/0001_training.up.sql diff --git a/build/package/migrations/Dockerfile b/build/package/migrations/Dockerfile new file mode 100644 index 0000000..bba0de9 --- /dev/null +++ b/build/package/migrations/Dockerfile @@ -0,0 +1,10 @@ +# syntax=docker/dockerfile:1 +FROM migrate/migrate:v4.17.1 AS migrate + +FROM alpine:3.20 AS runtime + +COPY --from=migrate /usr/local/bin/migrate /usr/local/bin/migrate + +COPY db/migrations/ /srv/migrations/ + +CMD [ "ash" ] diff --git a/db/migrations/0001_training.down.sql b/db/migrations/0001_training.down.sql new file mode 100644 index 0000000..385b693 --- /dev/null +++ b/db/migrations/0001_training.down.sql @@ -0,0 +1,5 @@ +DROP TABLE IF EXISTS training.prices; + +DROP TABLE IF EXISTS training.trainings; + +DROP SCHEMA IF EXISTS training; diff --git a/db/migrations/0001_training.up.sql b/db/migrations/0001_training.up.sql new file mode 100644 index 0000000..6fccb12 --- /dev/null +++ b/db/migrations/0001_training.up.sql @@ -0,0 +1,25 @@ +BEGIN; + +CREATE SCHEMA IF NOT EXISTS training; + +CREATE TABLE IF NOT EXISTS training.trainings ( + id SERIAL PRIMARY KEY, + name varchar(255) NOT NULL, + days smallint NOT NULL, + published boolean NOT NULL DEFAULT FALSE, + retired boolean NOT NULL DEFAULT FALSE +); + +CREATE TABLE IF NOT EXISTS training.prices ( + training_id SERIAL REFERENCES training.trainings(id), + amount NUMERIC(10,4) NOT NULL, + currency VARCHAR(3) NOT NULL, + CONSTRAINT positive_amount CHECK (amount >= 0), + CONSTRAINT allowed_currencies CHECK (currency IN ('USD', 'EUR', 'CZK')), + type VARCHAR(10) NOT NULL, + CHECK (type IN ('OPEN', 'CORPORATE')), + PRIMARY KEY (training_id, currency, type) -- composite primary key +); + +COMMIT; +