From 4bc5be3c7363071beba9909e7fece5f4d3ceece7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Sun, 23 Nov 2025 17:47:49 +0100 Subject: [PATCH] Enable Flyway and add initial migration --- .../opa/security/RefreshTokenEntity.java | 1 + src/main/resources/application.yaml | 5 +- .../db/migration/V1__initial_migration.sql | 79 +++++++++++++++++++ 3 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/db/migration/V1__initial_migration.sql diff --git a/src/main/java/org/openpodcastapi/opa/security/RefreshTokenEntity.java b/src/main/java/org/openpodcastapi/opa/security/RefreshTokenEntity.java index 14b84d2..3407d21 100644 --- a/src/main/java/org/openpodcastapi/opa/security/RefreshTokenEntity.java +++ b/src/main/java/org/openpodcastapi/opa/security/RefreshTokenEntity.java @@ -12,6 +12,7 @@ @NoArgsConstructor @AllArgsConstructor @Builder +@Table(name = "refresh_tokens") public class RefreshTokenEntity { @Id @Generated diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 8de3ae7..bed7284 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -19,10 +19,9 @@ spring: flyway: user: "${POSTGRES_USER}" password: "${POSTGRES_PASSWORD}" - schemas: "${POSTGRES_DB}" - locations: filesystem:db/migration + schemas: public url: "jdbc:postgresql://${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}" - enabled: false + enabled: true data: redis: host: "${REDIS_HOST}" diff --git a/src/main/resources/db/migration/V1__initial_migration.sql b/src/main/resources/db/migration/V1__initial_migration.sql new file mode 100644 index 0000000..d328391 --- /dev/null +++ b/src/main/resources/db/migration/V1__initial_migration.sql @@ -0,0 +1,79 @@ +CREATE TABLE refresh_tokens +( + id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, + token_hash VARCHAR(255) NOT NULL, + user_id BIGINT NOT NULL, + expires_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, + CONSTRAINT pk_refresh_tokens PRIMARY KEY (id) +); + +CREATE TABLE subscriptions +( + id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, + uuid UUID NOT NULL, + feed_url VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, + CONSTRAINT pk_subscriptions PRIMARY KEY (id) +); + +CREATE TABLE user_roles +( + user_id BIGINT NOT NULL, + user_roles VARCHAR(255) +); + +CREATE TABLE user_subscription +( + id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, + uuid UUID NOT NULL, + user_id BIGINT, + subscription_id BIGINT, + is_subscribed BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, + CONSTRAINT pk_user_subscription PRIMARY KEY (id) +); + +CREATE TABLE users +( + id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, + uuid UUID NOT NULL, + username VARCHAR(255) NOT NULL, + password VARCHAR(255) NOT NULL, + email VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE, + updated_at TIMESTAMP WITHOUT TIME ZONE, + CONSTRAINT pk_users PRIMARY KEY (id) +); + +ALTER TABLE refresh_tokens + ADD CONSTRAINT uc_refresh_tokens_tokenhash UNIQUE (token_hash); + +ALTER TABLE subscriptions + ADD CONSTRAINT uc_subscriptions_uuid UNIQUE (uuid); + +ALTER TABLE user_subscription + ADD CONSTRAINT uc_user_subscription_uuid UNIQUE (uuid); + +ALTER TABLE users + ADD CONSTRAINT uc_users_email UNIQUE (email); + +ALTER TABLE users + ADD CONSTRAINT uc_users_username UNIQUE (username); + +ALTER TABLE users + ADD CONSTRAINT uc_users_uuid UNIQUE (uuid); + +ALTER TABLE refresh_tokens + ADD CONSTRAINT FK_REFRESH_TOKENS_ON_USER FOREIGN KEY (user_id) REFERENCES users (id); + +ALTER TABLE user_subscription + ADD CONSTRAINT FK_USER_SUBSCRIPTION_ON_SUBSCRIPTION FOREIGN KEY (subscription_id) REFERENCES subscriptions (id); + +ALTER TABLE user_subscription + ADD CONSTRAINT FK_USER_SUBSCRIPTION_ON_USER FOREIGN KEY (user_id) REFERENCES users (id); + +ALTER TABLE user_roles + ADD CONSTRAINT fk_user_roles_on_user_entity FOREIGN KEY (user_id) REFERENCES users (id); \ No newline at end of file