From c34a733720d69f30dc97702039dd6ce72956f559 Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Tue, 22 Nov 2022 17:51:51 +0100
Subject: [PATCH] Progress on fixing int to bigint and references

---
 fda-authentication-service/Dockerfile |  4 +--
 fda-authentication-service/pom.xml    |  5 ++++
 fda-container-service/Dockerfile      |  4 +--
 fda-database-service/Dockerfile       |  4 +--
 fda-identifier-service/Dockerfile     |  4 +--
 fda-metadata-db/Dockerfile            | 12 ++++++--
 fda-metadata-db/setup-schema.sql      | 43 +++++++++++++--------------
 fda-metadata-db/setup-user.sh         |  5 ++++
 fda-metadata-service/Dockerfile       |  4 +--
 fda-metadata-service/pom.xml          |  6 ++++
 fda-query-service/Dockerfile          |  4 +--
 fda-table-service/Dockerfile          |  4 +--
 12 files changed, 60 insertions(+), 39 deletions(-)
 create mode 100644 fda-metadata-db/setup-user.sh

diff --git a/fda-authentication-service/Dockerfile b/fda-authentication-service/Dockerfile
index 42dece92fa..3011726fb1 100644
--- a/fda-authentication-service/Dockerfile
+++ b/fda-authentication-service/Dockerfile
@@ -22,8 +22,8 @@ RUN mvn -q clean package -DskipTests
 FROM openjdk:11-jre-slim as runtime
 
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
 ENV WEBSITE=http://example.com
diff --git a/fda-authentication-service/pom.xml b/fda-authentication-service/pom.xml
index 2d96e04186..4fd2e72422 100644
--- a/fda-authentication-service/pom.xml
+++ b/fda-authentication-service/pom.xml
@@ -117,6 +117,11 @@
             <artifactId>h2</artifactId>
             <scope>runtime</scope>
         </dependency>
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+            <version>${mariadb.version}</version>
+        </dependency>
         <!-- IDE -->
         <dependency>
             <groupId>org.projectlombok</groupId>
diff --git a/fda-container-service/Dockerfile b/fda-container-service/Dockerfile
index 3bea5887a3..9fbaa3dc94 100644
--- a/fda-container-service/Dockerfile
+++ b/fda-container-service/Dockerfile
@@ -22,8 +22,8 @@ RUN mvn -q clean package -DskipTests > /dev/null
 FROM openjdk:11-jre-slim as runtime
 
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
 ENV SHARED_FILESYSTEM=/tmp
diff --git a/fda-database-service/Dockerfile b/fda-database-service/Dockerfile
index a6f4b9a8f9..4da92d5f6a 100644
--- a/fda-database-service/Dockerfile
+++ b/fda-database-service/Dockerfile
@@ -22,8 +22,8 @@ RUN mvn -q clean package -DskipTests > /dev/null
 FROM openjdk:11-jre-slim as runtime
 
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
 ENV SEARCH_ENDPOINT=search-service
diff --git a/fda-identifier-service/Dockerfile b/fda-identifier-service/Dockerfile
index 3db7b8b6f7..7a05fc2856 100644
--- a/fda-identifier-service/Dockerfile
+++ b/fda-identifier-service/Dockerfile
@@ -23,8 +23,8 @@ RUN mvn -q clean package -DskipTests > /dev/null
 FROM openjdk:11-jre-slim as runtime
 
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV GATEWAY_ENDPOINT=http://gateway-service:9095
 ENV WEBSITE=http://localhost:3000
 ENV LOG_LEVEL=debug
diff --git a/fda-metadata-db/Dockerfile b/fda-metadata-db/Dockerfile
index 5cb120f95a..bc6ee91576 100644
--- a/fda-metadata-db/Dockerfile
+++ b/fda-metadata-db/Dockerfile
@@ -18,14 +18,20 @@ RUN mvn -q clean package -DskipTests > /dev/null
 RUN mvn -q clean install > /dev/null
 
 ###### SECOND STAGE ######
-FROM postgres:14-alpine as runtime
+FROM mariadb:10.5 as runtime
 
+ENV METADATA_DB=fda
 ENV METADATA_USERNAME=dbrepo
 ENV METADATA_PASSWORD=dbrepo
+ENV MARIADB_DATABASE="${METADATA_DB}"
+ENV MARIADB_ROOT_PASSWORD="${METADATA_PASSWORD}"
+ENV MARIADB_USERNAME="${METADATA_USERNAME}"
+ENV MARIADB_PASSWORD="${METADATA_PASSWORD}"
 
 # Scripts are copied to /docker-entrypoint-initdb.d/ in docker-compose from analyze service
-HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD pg_isready
+HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD mysqladmin ping --user="$METADATA_USERNAME" --password="$METADATA_PASSWORD" --silent
 
-COPY ./setup-schema.sql /docker-entrypoint-initdb.d/
+COPY ./setup-schema.sql /docker-entrypoint-initdb.d/1.sql
+COPY ./setup-user.sh /docker-entrypoint-initdb.d/2.sh
 
 COPY --from=build /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien
\ No newline at end of file
diff --git a/fda-metadata-db/setup-schema.sql b/fda-metadata-db/setup-schema.sql
index 1e18e92dc3..fd2dd014a2 100644
--- a/fda-metadata-db/setup-schema.sql
+++ b/fda-metadata-db/setup-schema.sql
@@ -126,6 +126,13 @@ CREATE SEQUENCE mdb_tokens_seq
     NO MAXVALUE
     CACHE 1;
 
+CREATE SEQUENCE mdb_concepts_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
 CREATE TABLE IF NOT EXISTS mdb_users
 (
     UserID               bigint       not null DEFAULT nextval(mdb_user_seq),
@@ -306,7 +313,7 @@ CREATE TABLE IF NOT EXISTS mdb_tables
     tDescription  TEXT,
     NumCols       INTEGER,
     NumRows       INTEGER,
-    separator     CHAR(1),
+    `separator`   CHAR(1),
     quote         CHAR(1),
     element_null  VARCHAR(50),
     skip_lines    BIGINT,
@@ -404,21 +411,22 @@ CREATE TABLE IF NOT EXISTS mdb_COLUMNS_cat
 
 CREATE TABLE IF NOT EXISTS mdb_concepts
 (
+    id         bigint    not null default nextval(mdb_concepts_seq),
     URI        TEXT,
     name       TEXT,
     created    timestamp NOT NULL DEFAULT NOW(),
     created_by bigint,
     FOREIGN KEY (created_by) REFERENCES mdb_users (UserID),
-    PRIMARY KEY (URI)
+    PRIMARY KEY (id)
 );
 
 CREATE TABLE IF NOT EXISTS mdb_columns_concepts
 (
-    cDBID   bigint    NOT NULL,
-    tID     bigint    NOT NULL,
-    cID     bigint    NOT NULL,
-    URI     TEXT REFERENCES mdb_concepts (URI),
-    created timestamp NOT NULL DEFAULT NOW(),
+    cDBID      bigint    NOT NULL,
+    tID        bigint    NOT NULL,
+    cID        bigint    NOT NULL,
+    concept_id bigint REFERENCES mdb_concepts (id), /* mysql does not allow text primary keys */
+    created    timestamp NOT NULL DEFAULT NOW(),
     FOREIGN KEY (cDBID, tID, cID) REFERENCES mdb_COLUMNS (cDBID, tID, ID),
     PRIMARY KEY (cDBID, tID, cID)
 );
@@ -509,21 +517,12 @@ CREATE TABLE IF NOT EXISTS mdb_creators
     FOREIGN KEY (pid) REFERENCES mdb_identifiers (id)
 );
 
-CREATE TABLE IF NOT EXISTS mdb_views_databases
-(
-    mdb_view_id  bigint,
-    databases_id bigint REFERENCES mdb_databases (id),
-    created      timestamp NOT NULL DEFAULT NOW(),
-    FOREIGN KEY (mdb_view_id, databases_id) REFERENCES mdb_VIEW (id, vdbid),
-    PRIMARY KEY (mdb_view_id, databases_id)
-);
-
 CREATE TABLE IF NOT EXISTS mdb_feed
 (
     fDBID   bigint,
     fID     bigint,
-    fUserId INTEGER REFERENCES mdb_users (UserID),
-    fDataID INTEGER REFERENCES mdb_data (ID),
+    fUserId bigint REFERENCES mdb_users (UserID),
+    fDataID bigint REFERENCES mdb_data (ID),
     created timestamp NOT NULL DEFAULT NOW(),
     FOREIGN KEY (fDBID, fID) REFERENCES mdb_tables (tDBID, ID),
     PRIMARY KEY (fDBID, fID, fUserId, fDataID)
@@ -531,7 +530,7 @@ CREATE TABLE IF NOT EXISTS mdb_feed
 
 CREATE TABLE IF NOT EXISTS mdb_update
 (
-    uUserID INTEGER REFERENCES mdb_users (UserID),
+    uUserID bigint REFERENCES mdb_users (UserID),
     uDBID   bigint REFERENCES mdb_databases (id),
     created timestamp NOT NULL DEFAULT NOW(),
     PRIMARY KEY (uUserID, uDBID)
@@ -539,7 +538,7 @@ CREATE TABLE IF NOT EXISTS mdb_update
 
 CREATE TABLE IF NOT EXISTS mdb_access
 (
-    aUserID  INTEGER REFERENCES mdb_users (UserID),
+    aUserID  bigint REFERENCES mdb_users (UserID),
     aDBID    bigint REFERENCES mdb_databases (id),
     attime   TIMESTAMP,
     download BOOLEAN,
@@ -551,14 +550,14 @@ CREATE TABLE IF NOT EXISTS mdb_have_access
 (
     hUserID bigint REFERENCES mdb_users (UserID),
     hDBID   bigint REFERENCES mdb_databases (id),
-    hType ENUM('R', 'W'),
+    hType   ENUM ('R', 'W'),
     created timestamp NOT NULL DEFAULT NOW(),
     PRIMARY KEY (hUserID, hDBID)
 );
 
 CREATE TABLE IF NOT EXISTS mdb_owns
 (
-    oUserID INTEGER REFERENCES mdb_users (UserID),
+    oUserID bigint REFERENCES mdb_users (UserID),
     oDBID   bigint REFERENCES mdb_databases (ID),
     created timestamp NOT NULL DEFAULT NOW(),
     PRIMARY KEY (oUserID, oDBID)
diff --git a/fda-metadata-db/setup-user.sh b/fda-metadata-db/setup-user.sh
new file mode 100644
index 0000000000..63c5e77afe
--- /dev/null
+++ b/fda-metadata-db/setup-user.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+mysql --user="root" --password="${METADATA_PASSWORD}" --database="${METADATA_DB}" << EOF
+CREATE USER '${MARIADB_USERNAME}' IDENTIFIED BY '${MARIADB_PASSWORD}';
+GRANT ALL PRIVILEGES ON '${METADATA_DB}' TO '${MARIADB_USERNAME}';
+EOF
\ No newline at end of file
diff --git a/fda-metadata-service/Dockerfile b/fda-metadata-service/Dockerfile
index a727f81379..9b486066e9 100644
--- a/fda-metadata-service/Dockerfile
+++ b/fda-metadata-service/Dockerfile
@@ -22,8 +22,8 @@ RUN mvn -q clean package -DskipTests > /dev/null
 FROM openjdk:11-jre-slim as runtime
 
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV GATEWAY_ENDPOINT=http://gateway-service:9095
 ENV PID_BASE="https://example.com/pid/"
 ENV REPOSITORY_NAME="Example Repository"
diff --git a/fda-metadata-service/pom.xml b/fda-metadata-service/pom.xml
index d54686f8c3..43a00dab90 100644
--- a/fda-metadata-service/pom.xml
+++ b/fda-metadata-service/pom.xml
@@ -60,6 +60,12 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
+        <!-- Datasource -->
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+            <version>${mariadb.version}</version>
+        </dependency>
         <!-- Monitoring -->
         <dependency>
             <groupId>io.micrometer</groupId>
diff --git a/fda-query-service/Dockerfile b/fda-query-service/Dockerfile
index b2dac0fa18..dab9e245a7 100644
--- a/fda-query-service/Dockerfile
+++ b/fda-query-service/Dockerfile
@@ -23,8 +23,8 @@ RUN mvn -q clean package -DskipTests > /dev/null
 FROM openjdk:11-jre-slim as runtime
 
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
 ENV GATEWAY_ENDPOINT=http://gateway-service:9095
diff --git a/fda-table-service/Dockerfile b/fda-table-service/Dockerfile
index e0849c308f..837ca53a56 100644
--- a/fda-table-service/Dockerfile
+++ b/fda-table-service/Dockerfile
@@ -24,8 +24,8 @@ FROM openjdk:11-jre-slim as runtime
 
 ENV multipart.location=/tmp
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
 ENV SEARCH_ENDPOINT=search-service
-- 
GitLab