From 548410c43a8ef94ae573f9d4e88c13a021244064 Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Thu, 5 Jan 2023 08:38:26 +0100
Subject: [PATCH] WIP

---
 .../database/table/TableCreateRawQuery.java   |  4 +-
 .../database/table/TableInsertRawQuery.java   |  4 +-
 .../database/table/columns/TableColumn.java   |  8 ++--
 .../table/columns/concepts/ColumnConcept.java | 45 +++++++++---------
 .../columns/concepts/ColumnConceptKey.java    | 16 -------
 .../table/columns/concepts/Concept.java       | 46 -------------------
 .../Unit.java => units/ColumnUnit.java}       |  4 +-
 fda-table-service/.dockerignore               |  1 -
 fda-table-service/.gitignore                  |  4 --
 fda-table-service/Dockerfile                  | 12 ++---
 fda-table-service/README.md                   |  7 +++
 fda-table-service/api/pom.xml                 | 21 ---------
 fda-table-service/pom.xml                     |  1 -
 fda-table-service/report/pom.xml              |  7 ++-
 fda-table-service/rest-service/pom.xml        |  8 +++-
 .../at/tuwien/FdaTableServiceApplication.java |  2 +-
 .../src/test/java/at/tuwien/BaseUnitTest.java |  4 +-
 .../tuwien/hibernate/DbrepoSchemaFilter.java  |  2 +-
 .../src/test/resources/application.properties |  2 +-
 .../rest-service/src/test/resources/init.sql  | 10 ----
 .../src/test/resources/schema.sql             |  2 +
 fda-table-service/services/pom.xml            | 11 +----
 .../java/at/tuwien/mapper/TableMapper.java    |  8 ++--
 .../repository/jpa/ConceptRepository.java     |  4 +-
 .../tuwien/repository/jpa/UnitRepository.java |  4 +-
 .../tuwien/service/impl/TableServiceImpl.java | 30 ++++++------
 26 files changed, 89 insertions(+), 178 deletions(-)
 rename fda-table-service/api/src/main/java/at/tuwien/CreateTableRawQuery.java => fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java (81%)
 rename fda-table-service/api/src/main/java/at/tuwien/InsertTableRawQuery.java => fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java (75%)
 delete mode 100644 fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/ColumnConceptKey.java
 delete mode 100644 fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java
 rename fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/{concepts/Unit.java => units/ColumnUnit.java} (94%)
 delete mode 100644 fda-table-service/.dockerignore
 create mode 100644 fda-table-service/README.md
 delete mode 100644 fda-table-service/api/pom.xml
 delete mode 100644 fda-table-service/rest-service/src/test/resources/init.sql
 create mode 100644 fda-table-service/rest-service/src/test/resources/schema.sql

diff --git a/fda-table-service/api/src/main/java/at/tuwien/CreateTableRawQuery.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java
similarity index 81%
rename from fda-table-service/api/src/main/java/at/tuwien/CreateTableRawQuery.java
rename to fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java
index 2b9c7a1276..a587587d2f 100644
--- a/fda-table-service/api/src/main/java/at/tuwien/CreateTableRawQuery.java
+++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java
@@ -1,4 +1,4 @@
-package at.tuwien;
+package at.tuwien.api.database.table;
 
 import lombok.*;
 
@@ -10,7 +10,7 @@ import java.sql.PreparedStatement;
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
-public class CreateTableRawQuery {
+public class TableCreateRawQuery {
 
     private PreparedStatement preparedStatement;
 
diff --git a/fda-table-service/api/src/main/java/at/tuwien/InsertTableRawQuery.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java
similarity index 75%
rename from fda-table-service/api/src/main/java/at/tuwien/InsertTableRawQuery.java
rename to fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java
index 4541a7786d..66d09bb136 100644
--- a/fda-table-service/api/src/main/java/at/tuwien/InsertTableRawQuery.java
+++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java
@@ -1,4 +1,4 @@
-package at.tuwien;
+package at.tuwien.api.database.table;
 
 import lombok.*;
 
@@ -11,7 +11,7 @@ import java.util.List;
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
-public class InsertTableRawQuery {
+public class TableInsertRawQuery {
 
     private String query;
 
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java
index 4c0faa0029..9cf3d52728 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java
@@ -2,8 +2,8 @@ package at.tuwien.entities.database.table.columns;
 
 import at.tuwien.entities.container.image.ContainerImageDate;
 import at.tuwien.entities.database.table.Table;
-import at.tuwien.entities.database.table.columns.concepts.Concept;
-import at.tuwien.entities.database.table.columns.concepts.Unit;
+import at.tuwien.entities.database.table.columns.concepts.ColumnConcept;
+import at.tuwien.entities.database.table.columns.units.ColumnUnit;
 import at.tuwien.entities.user.User;
 import lombok.*;
 import net.sf.jsqlparser.statement.select.SelectItem;
@@ -123,7 +123,7 @@ public class TableColumn implements Comparable<TableColumn> {
                     @JoinColumn(name = "cdbid", referencedColumnName = "cdbid", insertable = false, updatable = false)
             },
             inverseJoinColumns = @JoinColumn(name = "uri", referencedColumnName = "uri"))
-    private Concept concept;
+    private ColumnConcept concept;
 
     @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
     @JoinTable(name = "mdb_columns_units",
@@ -133,7 +133,7 @@ public class TableColumn implements Comparable<TableColumn> {
                     @JoinColumn(name = "cdbid", referencedColumnName = "cdbid", insertable = false, updatable = false)
             },
             inverseJoinColumns = @JoinColumn(name = "uri", referencedColumnName = "uri"))
-    private Unit unit;
+    private ColumnUnit unit;
 
     @Column
     @LastModifiedDate
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/ColumnConcept.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/ColumnConcept.java
index 711a86286e..4d0e5f6048 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/ColumnConcept.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/ColumnConcept.java
@@ -1,43 +1,46 @@
 package at.tuwien.entities.database.table.columns.concepts;
 
+import at.tuwien.entities.database.table.columns.TableColumn;
 import lombok.*;
-import org.hibernate.annotations.GenericGenerator;
+import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 
 import javax.persistence.*;
-import java.io.Serializable;
+import java.time.Instant;
+import java.util.List;
 
-/**
- * Join Table
- */
 @Data
 @Entity
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
 @ToString
-@IdClass(ColumnConceptKey.class)
 @EntityListeners(AuditingEntityListener.class)
 @EqualsAndHashCode(onlyExplicitlyIncluded = true)
-@javax.persistence.Table(name = "mdb_columns_concepts")
-public class ColumnConcept implements Serializable {
+@javax.persistence.Table(name = "mdb_concepts")
+public class ColumnConcept {
 
     @Id
     @EqualsAndHashCode.Include
-    @GeneratedValue(generator = "columns-concepts-sequence")
-    @GenericGenerator(name = "columns-concepts-sequence", strategy = "increment")
-    @Column(updatable = false, nullable = false)
-    private Long cid;
+    @Column(nullable = false, columnDefinition = "TEXT")
+    private String uri;
 
-    @Id
-    @EqualsAndHashCode.Include
-    private Long tid;
+    @Column(name = "name", nullable = false)
+    private String name;
 
-    @Id
-    @EqualsAndHashCode.Include
-    private Long cdbid;
+    @org.springframework.data.annotation.Transient
+    @ToString.Exclude
+    @OneToMany(fetch = FetchType.LAZY)
+    @JoinTable(name = "mdb_columns_concepts",
+            joinColumns = @JoinColumn(name = "uri", referencedColumnName = "uri", insertable = false, updatable = false),
+            inverseJoinColumns = {
+                    @JoinColumn(name = "cid", referencedColumnName = "id", insertable = false, updatable = false),
+                    @JoinColumn(name = "tid", referencedColumnName = "tid", insertable = false, updatable = false),
+                    @JoinColumn(name = "cdbid", referencedColumnName = "cdbid", insertable = false, updatable = false)
+            })
+    private List<TableColumn> columns;
 
-    @EqualsAndHashCode.Include
-    @Column(columnDefinition = "TEXT")
-    private String uri;
+    @Column(nullable = false, updatable = false)
+    @CreatedDate
+    private Instant created;
 }
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/ColumnConceptKey.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/ColumnConceptKey.java
deleted file mode 100644
index 7b0b79ee86..0000000000
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/ColumnConceptKey.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package at.tuwien.entities.database.table.columns.concepts;
-
-import lombok.EqualsAndHashCode;
-
-import java.io.Serializable;
-
-@EqualsAndHashCode
-public class ColumnConceptKey implements Serializable {
-
-    private Long cid;
-
-    private Long cdbid;
-
-    private Long tid;
-
-}
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java
deleted file mode 100644
index 1771719c74..0000000000
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package at.tuwien.entities.database.table.columns.concepts;
-
-import at.tuwien.entities.database.table.columns.TableColumn;
-import lombok.*;
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.data.jpa.domain.support.AuditingEntityListener;
-
-import javax.persistence.*;
-import java.time.Instant;
-import java.util.List;
-
-@Data
-@Entity
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@ToString
-@EntityListeners(AuditingEntityListener.class)
-@EqualsAndHashCode(onlyExplicitlyIncluded = true)
-@javax.persistence.Table(name = "mdb_concepts")
-public class Concept {
-
-    @Id
-    @EqualsAndHashCode.Include
-    @Column(nullable = false, columnDefinition = "TEXT")
-    private String uri;
-
-    @Column(name = "name", nullable = false)
-    private String name;
-
-    @org.springframework.data.annotation.Transient
-    @ToString.Exclude
-    @OneToMany(fetch = FetchType.LAZY)
-    @JoinTable(name = "mdb_columns_concepts",
-            joinColumns = @JoinColumn(name = "uri", referencedColumnName = "uri", insertable = false, updatable = false),
-            inverseJoinColumns = {
-                    @JoinColumn(name = "cid", referencedColumnName = "id", insertable = false, updatable = false),
-                    @JoinColumn(name = "tid", referencedColumnName = "tid", insertable = false, updatable = false),
-                    @JoinColumn(name = "cdbid", referencedColumnName = "cdbid", insertable = false, updatable = false)
-            })
-    private List<TableColumn> columns;
-
-    @Column(nullable = false, updatable = false)
-    @CreatedDate
-    private Instant created;
-}
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Unit.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/units/ColumnUnit.java
similarity index 94%
rename from fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Unit.java
rename to fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/units/ColumnUnit.java
index 699cdf7d89..6969bc7a87 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Unit.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/units/ColumnUnit.java
@@ -1,4 +1,4 @@
-package at.tuwien.entities.database.table.columns.concepts;
+package at.tuwien.entities.database.table.columns.units;
 
 import at.tuwien.entities.database.table.columns.TableColumn;
 import lombok.*;
@@ -18,7 +18,7 @@ import java.util.List;
 @EntityListeners(AuditingEntityListener.class)
 @EqualsAndHashCode(onlyExplicitlyIncluded = true)
 @javax.persistence.Table(name = "mdb_units")
-public class Unit {
+public class ColumnUnit {
 
     @Id
     @EqualsAndHashCode.Include
diff --git a/fda-table-service/.dockerignore b/fda-table-service/.dockerignore
deleted file mode 100644
index fcdfe8de55..0000000000
--- a/fda-table-service/.dockerignore
+++ /dev/null
@@ -1 +0,0 @@
-rest-service/src/main/resources/*.csv
\ No newline at end of file
diff --git a/fda-table-service/.gitignore b/fda-table-service/.gitignore
index 8e5c311b11..7731f1adf2 100644
--- a/fda-table-service/.gitignore
+++ b/fda-table-service/.gitignore
@@ -4,12 +4,8 @@ target/
 !**/src/main/**/target/
 !**/src/test/**/target/
 
-### Environment ###
-.env
-
 ### Generated ###
 ready
-mapping.xml
 
 ### STS ###
 .apt_generated
diff --git a/fda-table-service/Dockerfile b/fda-table-service/Dockerfile
index ec1ab5c64e..4752a4a140 100644
--- a/fda-table-service/Dockerfile
+++ b/fda-table-service/Dockerfile
@@ -14,7 +14,6 @@ COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tu
 COPY ./rest-service ./rest-service
 COPY ./services ./services
 COPY ./report ./report
-COPY ./api ./api
 
 # Make sure it compiles
 RUN mvn -q clean package -DskipTests > /dev/null
@@ -27,9 +26,8 @@ ENV METADATA_USERNAME=root
 ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
-ENV SEARCH_ENDPOINT=search-service
-ENV GATEWAY_ENDPOINT=http://gateway-service:9095
-ENV multipart.location=/tmp
+ENV SHARED_FILESYSTEM=/tmp
+ENV USER_NETWORK=userdb
 ENV LOG_LEVEL=debug
 
 COPY ./service_ready /usr/bin
@@ -37,8 +35,8 @@ RUN chmod +x /usr/bin/service_ready
 
 HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD service_ready
 
-COPY --from=build ./rest-service/target/rest-service-*.jar ./table-service.jar
+COPY --from=build ./rest-service/target/rest-service-*.jar ./container-service.jar
 
-EXPOSE 9094
+EXPOSE 9091
 
-ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./table-service.jar"]
+ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./container-service.jar"]
diff --git a/fda-table-service/README.md b/fda-table-service/README.md
new file mode 100644
index 0000000000..986b2885e1
--- /dev/null
+++ b/fda-table-service/README.md
@@ -0,0 +1,7 @@
+# FDA Container Service
+
+## Documentation
+
+- OpenAPI v3: http://localhost:9091/swagger-ui/index.html
+- OpenAPI v3 endpoint: http://localhost:9091/v3/api-docs/
+- OpenAPI v3 YAML: http://localhost:9091/v3/api-docs.yaml
\ No newline at end of file
diff --git a/fda-table-service/api/pom.xml b/fda-table-service/api/pom.xml
deleted file mode 100644
index 658d47e006..0000000000
--- a/fda-table-service/api/pom.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <artifactId>fda-table-service</artifactId>
-        <groupId>at.tuwien</groupId>
-        <version>1.1.0-alpha</version>
-    </parent>
-
-    <artifactId>api</artifactId>
-    <name>fda-table-service-api</name>
-
-    <properties>
-        <jacoco.version>0.8.7</jacoco.version>
-    </properties>
-
-    <dependencies />
-
-</project>
\ No newline at end of file
diff --git a/fda-table-service/pom.xml b/fda-table-service/pom.xml
index 01d11e6846..e9faf0cbb3 100644
--- a/fda-table-service/pom.xml
+++ b/fda-table-service/pom.xml
@@ -19,7 +19,6 @@
         <module>rest-service</module>
         <module>services</module>
         <module>report</module>
-        <module>api</module>
     </modules>
 
     <properties>
diff --git a/fda-table-service/report/pom.xml b/fda-table-service/report/pom.xml
index 8b0c154b0f..1992c97aa9 100644
--- a/fda-table-service/report/pom.xml
+++ b/fda-table-service/report/pom.xml
@@ -4,13 +4,18 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
-        <artifactId>fda-table-service</artifactId>
         <groupId>at.tuwien</groupId>
+        <artifactId>fda-table-service</artifactId>
         <version>1.1.0-alpha</version>
     </parent>
 
     <artifactId>report</artifactId>
+    <version>1.1.0-alpha</version>
     <name>fda-table-service-report</name>
+    <description>
+        This module is only intended for the pipeline coverage report. See the detailed report in the
+        respective modules
+    </description>
 
     <properties>
         <jacoco.version>0.8.7</jacoco.version>
diff --git a/fda-table-service/rest-service/pom.xml b/fda-table-service/rest-service/pom.xml
index b73a6ef216..0fd761d629 100644
--- a/fda-table-service/rest-service/pom.xml
+++ b/fda-table-service/rest-service/pom.xml
@@ -4,14 +4,18 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
-        <artifactId>fda-table-service</artifactId>
         <groupId>at.tuwien</groupId>
+        <artifactId>fda-table-service</artifactId>
         <version>1.1.0-alpha</version>
     </parent>
 
     <artifactId>rest-service</artifactId>
     <version>1.1.0-alpha</version>
-    <name>fda-table-service-rest</name>
+    <name>fda-table-service-rest-service</name>
+
+    <properties>
+        <jacoco.version>0.8.7</jacoco.version>
+    </properties>
 
     <dependencies>
         <dependency>
diff --git a/fda-table-service/rest-service/src/main/java/at/tuwien/FdaTableServiceApplication.java b/fda-table-service/rest-service/src/main/java/at/tuwien/FdaTableServiceApplication.java
index 627cfa68a4..ebc2e89271 100644
--- a/fda-table-service/rest-service/src/main/java/at/tuwien/FdaTableServiceApplication.java
+++ b/fda-table-service/rest-service/src/main/java/at/tuwien/FdaTableServiceApplication.java
@@ -12,9 +12,9 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableJpaAuditing
 @SpringBootApplication
 @EnableTransactionManagement
+@EntityScan(basePackages = {"at.tuwien.entities"})
 @EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.elastic"})
 @EnableJpaRepositories(basePackages = {"at.tuwien.repository.jpa"})
-@EntityScan(basePackages = {"at.tuwien.entities"})
 public class FdaTableServiceApplication {
 
     public static void main(String[] args) {
diff --git a/fda-table-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-table-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
index ce3c4aa05d..119eaa6688 100644
--- a/fda-table-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
+++ b/fda-table-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
@@ -7,7 +7,7 @@ import at.tuwien.api.database.table.columns.ColumnCreateDto;
 import at.tuwien.api.database.table.columns.ColumnTypeDto;
 import at.tuwien.api.user.UserDto;
 import at.tuwien.entities.container.image.*;
-import at.tuwien.entities.database.table.columns.concepts.Concept;
+import at.tuwien.entities.database.table.columns.concepts.ColumnConcept;
 import at.tuwien.entities.user.RoleType;
 import at.tuwien.entities.user.User;
 import at.tuwien.querystore.Query;
@@ -744,7 +744,7 @@ public abstract class BaseUnitTest {
     public final static String CONCEPT_1_NAME = "Temperature";
     public final static Instant CONCEPT_1_CREATED = Instant.now().minus(1, HOURS);
 
-    public final static Concept CONCEPT_1 = Concept.builder()
+    public final static ColumnConcept CONCEPT_1 = ColumnConcept.builder()
             .name(CONCEPT_1_NAME)
             .created(CONCEPT_1_CREATED)
             .uri("http://www.ontology-of-units-of-measure.org/resource/om-2/")
diff --git a/fda-table-service/rest-service/src/test/java/at/tuwien/hibernate/DbrepoSchemaFilter.java b/fda-table-service/rest-service/src/test/java/at/tuwien/hibernate/DbrepoSchemaFilter.java
index bdbe4aebe2..1f0ad27cc0 100644
--- a/fda-table-service/rest-service/src/test/java/at/tuwien/hibernate/DbrepoSchemaFilter.java
+++ b/fda-table-service/rest-service/src/test/java/at/tuwien/hibernate/DbrepoSchemaFilter.java
@@ -6,7 +6,7 @@ import org.hibernate.mapping.Table;
 import org.hibernate.tool.schema.spi.SchemaFilter;
 
 /**
- * Do not create table for class {@link at.tuwien.entities.database.table.columns.concepts.Concept} when using JUnit test
+ * Do not create table for class {@link at.tuwien.entities.database.table.columns.concepts.ColumnConcept} when using JUnit test
  */
 public class DbrepoSchemaFilter implements SchemaFilter {
 
diff --git a/fda-table-service/rest-service/src/test/resources/application.properties b/fda-table-service/rest-service/src/test/resources/application.properties
index ef996777c5..d82af2fbd7 100644
--- a/fda-table-service/rest-service/src/test/resources/application.properties
+++ b/fda-table-service/rest-service/src/test/resources/application.properties
@@ -9,7 +9,7 @@ spring.cloud.config.discovery.enabled = false
 spring.cloud.config.enabled = false
 
 # internal datasource
-spring.datasource.url=jdbc:h2:mem:testdb;DATABASE_TO_UPPER=false;DB_CLOSE_ON_EXIT=FALSE;INIT=RUNSCRIPT FROM './src/test/resources/init.sql'
+spring.datasource.url=jdbc:h2:mem:fda;DATABASE_TO_UPPER=false;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:schema.sql'
 spring.datasource.driverClassName=org.h2.Driver
 spring.datasource.username=sa
 spring.datasource.password=password
diff --git a/fda-table-service/rest-service/src/test/resources/init.sql b/fda-table-service/rest-service/src/test/resources/init.sql
deleted file mode 100644
index e25e2d0d03..0000000000
--- a/fda-table-service/rest-service/src/test/resources/init.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE SCHEMA IF NOT EXISTS fda;
-DROP TABLE IF EXISTS fda.mdb_concepts CASCADE;
-CREATE TABLE IF NOT EXISTS fda.mdb_concepts
-(
-    uri        varchar(255) not null,
-    name       VARCHAR(255),
-    created    timestamp    NOT NULL DEFAULT NOW(),
-    created_by bigint,
-    PRIMARY KEY (uri)
-);
\ No newline at end of file
diff --git a/fda-table-service/rest-service/src/test/resources/schema.sql b/fda-table-service/rest-service/src/test/resources/schema.sql
new file mode 100644
index 0000000000..095a1096ea
--- /dev/null
+++ b/fda-table-service/rest-service/src/test/resources/schema.sql
@@ -0,0 +1,2 @@
+CREATE SCHEMA IF NOT EXISTS `fda`;
+SET SCHEMA `fda`;
\ No newline at end of file
diff --git a/fda-table-service/services/pom.xml b/fda-table-service/services/pom.xml
index 4a87bfe0d3..8deff1d33e 100644
--- a/fda-table-service/services/pom.xml
+++ b/fda-table-service/services/pom.xml
@@ -13,15 +13,6 @@
     <version>1.1.0-alpha</version>
     <name>fda-table-service-services</name>
 
-    <dependencies >
-        <dependency>
-            <groupId>at.tuwien</groupId>
-            <artifactId>api</artifactId>
-            <version>1.1.0-alpha</version>
-            <scope>compile</scope>
-        </dependency>
-    </dependencies>
-
     <build>
         <plugins>
             <plugin>
@@ -48,4 +39,4 @@
         </plugins>
     </build>
 
-</project>
+</project>
\ No newline at end of file
diff --git a/fda-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java b/fda-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java
index c4a316dd06..a90f951708 100644
--- a/fda-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java
+++ b/fda-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java
@@ -1,8 +1,8 @@
 package at.tuwien.mapper;
 
-import at.tuwien.CreateTableRawQuery;
 import at.tuwien.api.database.table.TableBriefDto;
 import at.tuwien.api.database.table.TableCreateDto;
+import at.tuwien.api.database.table.TableCreateRawQuery;
 import at.tuwien.api.database.table.TableDto;
 import at.tuwien.api.database.table.columns.ColumnCreateDto;
 import at.tuwien.api.database.table.columns.ColumnDto;
@@ -72,7 +72,7 @@ public interface TableMapper {
             @Mapping(source = "data.dfid", target = "dfid"),
             @Mapping(source = "data.lastModified", target = "lastModified"),
     })
-    TableColumn tableColumnToTableColumn(Table table, TableColumn data, CreateTableRawQuery query);
+    TableColumn tableColumnToTableColumn(Table table, TableColumn data, TableCreateRawQuery query);
 
     @Named("internalMapping")
     default String nameToInternalName(String data) {
@@ -172,7 +172,7 @@ public interface TableMapper {
      * @param data     The table
      * @return The create table query
      */
-    default CreateTableRawQuery tableToCreateTableRawQuery(Connection connection, Database database, TableCreateDto data)
+    default TableCreateRawQuery tableToCreateTableRawQuery(Connection connection, Database database, TableCreateDto data)
             throws ImageNotSupportedException, TableMalformedException, QueryMalformedException {
         if (!database.getContainer().getImage().getRepository().equals("mariadb")) {
             log.error("Currently only MariaDB is supported");
@@ -263,7 +263,7 @@ public interface TableMapper {
         try {
             final PreparedStatement pstmt = connection.prepareStatement(query.toString());
             log.trace("prepared create table statement {}", query);
-            return CreateTableRawQuery.builder()
+            return TableCreateRawQuery.builder()
                     .preparedStatement(pstmt)
                     .generated(!primaryColumnExists)
                     .build();
diff --git a/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/ConceptRepository.java b/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/ConceptRepository.java
index 2f29e71962..61d4cfe57e 100644
--- a/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/ConceptRepository.java
+++ b/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/ConceptRepository.java
@@ -1,10 +1,10 @@
 package at.tuwien.repository.jpa;
 
-import at.tuwien.entities.database.table.columns.concepts.Concept;
+import at.tuwien.entities.database.table.columns.concepts.ColumnConcept;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface ConceptRepository extends JpaRepository<Concept, String> {
+public interface ConceptRepository extends JpaRepository<ColumnConcept, String> {
 
 }
diff --git a/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/UnitRepository.java b/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/UnitRepository.java
index 01cbeeaa41..5408cc4961 100644
--- a/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/UnitRepository.java
+++ b/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/UnitRepository.java
@@ -1,10 +1,10 @@
 package at.tuwien.repository.jpa;
 
-import at.tuwien.entities.database.table.columns.concepts.Unit;
+import at.tuwien.entities.database.table.columns.units.ColumnUnit;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface UnitRepository extends JpaRepository<Unit, String> {
+public interface UnitRepository extends JpaRepository<ColumnUnit, String> {
 
 }
diff --git a/fda-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/fda-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
index 542fd15136..6c8d45d11a 100644
--- a/fda-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
+++ b/fda-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
@@ -1,14 +1,14 @@
 package at.tuwien.service.impl;
 
-import at.tuwien.CreateTableRawQuery;
 import at.tuwien.api.database.table.TableCreateDto;
+import at.tuwien.api.database.table.TableCreateRawQuery;
 import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto;
 import at.tuwien.entities.container.Container;
 import at.tuwien.entities.database.Database;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.entities.database.table.columns.TableColumn;
-import at.tuwien.entities.database.table.columns.concepts.Concept;
-import at.tuwien.entities.database.table.columns.concepts.Unit;
+import at.tuwien.entities.database.table.columns.concepts.ColumnConcept;
+import at.tuwien.entities.database.table.columns.units.ColumnUnit;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.TableMapper;
@@ -134,7 +134,7 @@ public class TableServiceImpl extends HibernateConnector implements TableService
         }
         /* run query */
         final ComboPooledDataSource dataSource = getDataSource(database.getContainer().getImage(), database.getContainer(), database);
-        final CreateTableRawQuery query;
+        final TableCreateRawQuery query;
         try {
             final Connection connection = dataSource.getConnection();
             query = tableMapper.tableToCreateTableRawQuery(connection, database, createDto);
@@ -217,7 +217,7 @@ public class TableServiceImpl extends HibernateConnector implements TableService
         final TableColumn column = findColumn(table, columnId);
         /* assign */
         if (updateDto.getUnitUri() != null) {
-            final Unit unit = findUnit(updateDto.getUnitUri());
+            final ColumnUnit unit = findUnit(updateDto.getUnitUri());
             column.setUnit(unit);
             log.debug("update unit of column, unit={}, column={}", unit, column);
         } else {
@@ -225,12 +225,12 @@ public class TableServiceImpl extends HibernateConnector implements TableService
             log.debug("remove unit of column, column={}", column);
         }
         if (updateDto.getConceptUri() != null) {
-            final Concept concept = findConcept(updateDto.getConceptUri());
+            final ColumnConcept concept = findConcept(updateDto.getConceptUri());
             column.setConcept(concept);
-            log.debug("update concept of column, concept={}, column={}", concept, column);
+            log.debug("update ColumnConcept of column, concept={}, column={}", concept, column);
         } else {
             column.setConcept(null);
-            log.debug("remove concept of column, column={}", column);
+            log.debug("remove ColumnConcept of column, column={}", column);
         }
         final TableColumn out = tableColumnRepository.save(column);
         log.info("Updated table column with id {} of table with id {}", columnId, tableId);
@@ -259,16 +259,16 @@ public class TableServiceImpl extends HibernateConnector implements TableService
     }
 
     /**
-     * Finds a concept with given uri
+     * Finds a ColumnConcept with given uri
      *
      * @param uri The uri.
      * @return The concept, if successful.
-     * @throws ConceptNotFoundException The concept was not found in the metadata database.
+     * @throws ConceptNotFoundException The ColumnConcept was not found in the metadata database.
      */
-    protected Concept findConcept(String uri) throws ConceptNotFoundException {
-        final Optional<Concept> optional = conceptRepository.findById(uri);
+    protected ColumnConcept findConcept(String uri) throws ConceptNotFoundException {
+        final Optional<ColumnConcept> optional = conceptRepository.findById(uri);
         if (optional.isEmpty()) {
-            log.error("Failed to find concept with uri {}", uri);
+            log.error("Failed to find ColumnConcept with uri {}", uri);
             throw new ConceptNotFoundException("Failed to find concept");
         }
         return optional.get();
@@ -281,8 +281,8 @@ public class TableServiceImpl extends HibernateConnector implements TableService
      * @return The unit, if successful.
      * @throws UnitNotFoundException The unit was not found in the metadata database.
      */
-    protected Unit findUnit(String uri) throws UnitNotFoundException {
-        final Optional<Unit> optional = unitRepository.findById(uri);
+    protected ColumnUnit findUnit(String uri) throws UnitNotFoundException {
+        final Optional<ColumnUnit> optional = unitRepository.findById(uri);
         if (optional.isEmpty()) {
             log.error("Failed to find unit with uri {}", uri);
             throw new UnitNotFoundException("Failed to find unit");
-- 
GitLab