From b759407c43d148ec3eb8380dfd08fa8e9f023f5c Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Wed, 17 Mar 2021 01:05:05 +0100
Subject: [PATCH] refs #16, created first draft of endpoint interfaces based on
 ER-diagram

---
 README.md                                     |  7 +-
 fda-container-managing-service/api/pom.xml    |  2 +-
 fda-container-managing-service/pom.xml        |  3 +-
 .../rest-service/pom.xml                      |  6 +-
 .../DatabaseContainerController.java          |  2 +-
 .../services/pom.xml                          |  4 +-
 fda-database-managing-service/Dockerfile      |  2 +-
 fda-database-managing-service/api/pom.xml     |  2 +-
 .../java/at/tuwien/dto/CreateDatabaseDTO.java | 18 -----
 .../tuwien/dto/database/DatabaseBriefDto.java | 12 +++
 .../dto/database/DatabaseChangeDto.java       | 12 +++
 .../dto/database/DatabaseCreateDto.java       | 29 +++++++
 .../at/tuwien/dto/database/DatabaseDto.java   | 14 ++++
 .../at/tuwien/dto/table/TableBriefDto.java    | 12 +++
 .../at/tuwien/dto/table/TableCreateDto.java   | 17 +++++
 .../java/at/tuwien/dto/table/TableDto.java    | 17 +++++
 .../dto/table/columns/AbstractColumnDto.java  |  9 +++
 .../table/columns/CategoricalColumnDto.java   | 14 ++++
 .../dto/table/columns/NominalColumnDto.java   | 12 +++
 .../dto/table/columns/NumericColumnDto.java   | 26 +++++++
 .../tuwien/dto/table/columns/SiUnitDto.java   |  5 ++
 .../gateways/pom.xml                          |  4 +-
 .../clients/FdaContainerManagingClient.java   |  6 +-
 fda-database-managing-service/pom.xml         |  3 +-
 .../rest-service/pom.xml                      |  4 +-
 .../tuwien/controller/DatabaseController.java | 55 --------------
 .../tuwien/endpoints/DatabaseController.java  | 75 +++++++++++++++++++
 .../at/tuwien/endpoints/TableController.java  | 74 ++++++++++++++++++
 .../services/pom.xml                          |  6 +-
 .../main/java/at/tuwien/entity/Auditable.java | 37 +++++++++
 .../main/java/at/tuwien/entity/Database.java  | 34 +++++++++
 .../src/main/java/at/tuwien/entity/Table.java | 22 ++++++
 .../src/main/java/at/tuwien/entity/View.java  | 24 ++++++
 .../tuwien/repository/DatabaseRepository.java |  7 ++
 .../at/tuwien/service/DatabaseService.java    |  4 +-
 35 files changed, 480 insertions(+), 100 deletions(-)
 delete mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/CreateDatabaseDTO.java
 create mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseBriefDto.java
 create mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseChangeDto.java
 create mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseCreateDto.java
 create mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseDto.java
 create mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableBriefDto.java
 create mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableCreateDto.java
 create mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableDto.java
 create mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/AbstractColumnDto.java
 create mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/CategoricalColumnDto.java
 create mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/NominalColumnDto.java
 create mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/NumericColumnDto.java
 create mode 100644 fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/SiUnitDto.java
 delete mode 100644 fda-database-managing-service/rest-service/src/main/java/at/tuwien/controller/DatabaseController.java
 create mode 100644 fda-database-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseController.java
 create mode 100644 fda-database-managing-service/rest-service/src/main/java/at/tuwien/endpoints/TableController.java
 create mode 100644 fda-database-managing-service/services/src/main/java/at/tuwien/entity/Auditable.java
 create mode 100644 fda-database-managing-service/services/src/main/java/at/tuwien/entity/Database.java
 create mode 100644 fda-database-managing-service/services/src/main/java/at/tuwien/entity/Table.java
 create mode 100644 fda-database-managing-service/services/src/main/java/at/tuwien/entity/View.java
 create mode 100644 fda-database-managing-service/services/src/main/java/at/tuwien/repository/DatabaseRepository.java

diff --git a/README.md b/README.md
index caadd4a9c6..b51e7f1907 100644
--- a/README.md
+++ b/README.md
@@ -31,9 +31,12 @@ docker-compose build
 
 ## Develop
 
-The endpoints are documented with Swagger 2.1 and OpenAPI 3.0. The current specification for the front-end is obtainable programatically from [http://fda-container-managing-service/swagger-resources](http://localhost:9091/swagger-resources).
+The endpoints are documented with Swagger 2.1 and OpenAPI 3.0. The current specification for the front-end is obtainable programatically from `http://localhost:<port>/swagger-resources`
 
-For easy visualization use OpenAPI at [http://fda-container-managing-service/swagger-ui/](http://localhost:9091/swagger-ui/)
+For easy visualization use OpenAPI at:
+
+- [http://fda-container-managing-service/swagger-ui/](http://localhost:9091/swagger-ui/)
+- [http://fda-database-managing-service/swagger-ui/](http://localhost:9092/swagger-ui/)
 
 ## Deployment
 
diff --git a/fda-container-managing-service/api/pom.xml b/fda-container-managing-service/api/pom.xml
index 91f5fdb591..20bce4c285 100644
--- a/fda-container-managing-service/api/pom.xml
+++ b/fda-container-managing-service/api/pom.xml
@@ -10,7 +10,7 @@
     </parent>
 
     <artifactId>api</artifactId>
-    <version>${global.version}</version>
+    <version>0.0.1-SNAPSHOT</version>
     <name>fda-container-managing-service-api</name>
 
     <properties>
diff --git a/fda-container-managing-service/pom.xml b/fda-container-managing-service/pom.xml
index 6487cae9e5..0cb1ad2abb 100644
--- a/fda-container-managing-service/pom.xml
+++ b/fda-container-managing-service/pom.xml
@@ -10,7 +10,7 @@
 
     <groupId>at.tuwien</groupId>
     <artifactId>fda-container-managing-service</artifactId>
-    <version>${global.version}</version>
+    <version>0.0.1-SNAPSHOT</version>
     <name>fda-container-managing-service</name>
     <description>Demo project for Spring Boot</description>
 
@@ -22,7 +22,6 @@
     </modules>
 
     <properties>
-        <global.version>0.0.1-SNAPSHOT</global.version>
         <java.version>11</java.version>
         <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
         <mapstruct.version>1.4.2.Final</mapstruct.version>
diff --git a/fda-container-managing-service/rest-service/pom.xml b/fda-container-managing-service/rest-service/pom.xml
index 8f358e49ab..829b177a90 100644
--- a/fda-container-managing-service/rest-service/pom.xml
+++ b/fda-container-managing-service/rest-service/pom.xml
@@ -10,7 +10,7 @@
     </parent>
 
     <artifactId>rest-service</artifactId>
-    <version>${global.version}</version>
+    <version>0.0.1-SNAPSHOT</version>
     <name>fda-container-managing-service-rest-service</name>
 
     <properties>
@@ -22,12 +22,12 @@
         <dependency>
             <groupId>at.tuwien</groupId>
             <artifactId>services</artifactId>
-            <version>${global.version}</version>
+            <version>0.0.1-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>at.tuwien</groupId>
             <artifactId>api</artifactId>
-            <version>${global.version}</version>
+            <version>0.0.1-SNAPSHOT</version>
         </dependency>
     </dependencies>
 
diff --git a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseContainerController.java b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseContainerController.java
index e6ec3fb703..8b06ed879a 100644
--- a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseContainerController.java
+++ b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseContainerController.java
@@ -83,7 +83,7 @@ public class DatabaseContainerController {
     }
 
     @DeleteMapping("/container/{id}")
-    @ApiOperation(value = "Delete a database container.")
+    @ApiOperation(value = "Delete a database container")
     public ResponseEntity deleteDatabaseContainer(@RequestParam String id) throws ContainerNotFoundException, DockerClientException {
         containerService.remove(id);
         return ResponseEntity.status(HttpStatus.OK)
diff --git a/fda-container-managing-service/services/pom.xml b/fda-container-managing-service/services/pom.xml
index 70ccec7ee9..7262a64da2 100644
--- a/fda-container-managing-service/services/pom.xml
+++ b/fda-container-managing-service/services/pom.xml
@@ -10,7 +10,7 @@
     </parent>
 
     <artifactId>services</artifactId>
-    <version>${global.version}</version>
+    <version>0.0.1-SNAPSHOT</version>
     <name>fda-container-managing-service-services</name>
 
     <properties>
@@ -22,7 +22,7 @@
         <dependency>
             <groupId>at.tuwien</groupId>
             <artifactId>api</artifactId>
-            <version>${project.version}</version>
+            <version>0.0.1-SNAPSHOT</version>
         </dependency>
     </dependencies>
 
diff --git a/fda-database-managing-service/Dockerfile b/fda-database-managing-service/Dockerfile
index ab1af5623e..a6133933e5 100644
--- a/fda-database-managing-service/Dockerfile
+++ b/fda-database-managing-service/Dockerfile
@@ -11,7 +11,7 @@ COPY ./gateways ./gateways
 COPY ./rest-service ./rest-service
 COPY ./services ./services
 
-RUN mvn -q clean package > /dev/null
+RUN mvn -q clean package -DskipTests
 
 ###### SECOND STAGE ######
 FROM openjdk:11-jre-slim as runtime
diff --git a/fda-database-managing-service/api/pom.xml b/fda-database-managing-service/api/pom.xml
index 1d09d21b37..e3fbd72fce 100644
--- a/fda-database-managing-service/api/pom.xml
+++ b/fda-database-managing-service/api/pom.xml
@@ -10,7 +10,7 @@
     </parent>
 
     <artifactId>api</artifactId>
-    <version>${global.version}</version>
+    <version>0.0.1-SNAPSHOT</version>
     <name>fda-database-managing-service-api</name>
 
     <properties>
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/CreateDatabaseDTO.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/CreateDatabaseDTO.java
deleted file mode 100644
index cb6f870caf..0000000000
--- a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/CreateDatabaseDTO.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package at.tuwien.dto;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@NoArgsConstructor
-public class CreateDatabaseDTO {
-
-    @JsonProperty("ContainerName")
-    private String containerName;
-    @JsonProperty("DatabaseName")
-    private String dbName;
-
-}
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseBriefDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseBriefDto.java
new file mode 100644
index 0000000000..d1a45515af
--- /dev/null
+++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseBriefDto.java
@@ -0,0 +1,12 @@
+package at.tuwien.dto.database;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class DatabaseBriefDto {
+
+    private Long id;
+
+}
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseChangeDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseChangeDto.java
new file mode 100644
index 0000000000..475b428a92
--- /dev/null
+++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseChangeDto.java
@@ -0,0 +1,12 @@
+package at.tuwien.dto.database;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class DatabaseChangeDto {
+
+    private Long databaseId;
+
+}
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseCreateDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseCreateDto.java
new file mode 100644
index 0000000000..7f8efa6264
--- /dev/null
+++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseCreateDto.java
@@ -0,0 +1,29 @@
+package at.tuwien.dto.database;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class DatabaseCreateDto {
+
+    /* container hash */
+    private String containerId;
+
+    private String name;
+
+    private String engine;
+
+    private String owner;
+
+    private String creator;
+
+    private String publisher;
+
+    private String publicationYear;
+
+    private String ResourceType;
+
+    private String description;
+
+}
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseDto.java
new file mode 100644
index 0000000000..0359f5786f
--- /dev/null
+++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseDto.java
@@ -0,0 +1,14 @@
+package at.tuwien.dto.database;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class DatabaseDto extends DatabaseBriefDto {
+
+    private String name;
+
+    private String containerId;
+
+}
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableBriefDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableBriefDto.java
new file mode 100644
index 0000000000..a8fde192c7
--- /dev/null
+++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableBriefDto.java
@@ -0,0 +1,12 @@
+package at.tuwien.dto.table;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class TableBriefDto {
+
+    private Long id;
+
+}
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableCreateDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableCreateDto.java
new file mode 100644
index 0000000000..6b1ef254db
--- /dev/null
+++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableCreateDto.java
@@ -0,0 +1,17 @@
+package at.tuwien.dto.table;
+
+import at.tuwien.dto.table.columns.AbstractColumnDto;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class TableCreateDto {
+
+    private String name;
+
+    private AbstractColumnDto[] columns;
+
+    private String description;
+
+}
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableDto.java
new file mode 100644
index 0000000000..b75ae0f12d
--- /dev/null
+++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableDto.java
@@ -0,0 +1,17 @@
+package at.tuwien.dto.table;
+
+import at.tuwien.dto.table.columns.AbstractColumnDto;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class TableDto extends TableBriefDto {
+
+    private String name;
+
+    private AbstractColumnDto[] columns;
+
+    private String description;
+
+}
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/AbstractColumnDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/AbstractColumnDto.java
new file mode 100644
index 0000000000..ffa09be7f2
--- /dev/null
+++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/AbstractColumnDto.java
@@ -0,0 +1,9 @@
+package at.tuwien.dto.table.columns;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public abstract class AbstractColumnDto {
+}
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/CategoricalColumnDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/CategoricalColumnDto.java
new file mode 100644
index 0000000000..21e355b238
--- /dev/null
+++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/CategoricalColumnDto.java
@@ -0,0 +1,14 @@
+package at.tuwien.dto.table.columns;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class CategoricalColumnDto extends AbstractColumnDto {
+
+    private Long totalCategories;
+
+    private String[] categories;
+
+}
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/NominalColumnDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/NominalColumnDto.java
new file mode 100644
index 0000000000..ec80607f83
--- /dev/null
+++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/NominalColumnDto.java
@@ -0,0 +1,12 @@
+package at.tuwien.dto.table.columns;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class NominalColumnDto extends AbstractColumnDto {
+
+    private Long maxLength;
+
+}
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/NumericColumnDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/NumericColumnDto.java
new file mode 100644
index 0000000000..b14f128a3e
--- /dev/null
+++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/NumericColumnDto.java
@@ -0,0 +1,26 @@
+package at.tuwien.dto.table.columns;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class NumericColumnDto extends AbstractColumnDto {
+
+    private Long maxLength;
+
+    private SiUnitDto siUnit;
+
+    private Double min;
+
+    private Double max;
+
+    private Double mean;
+
+    private Double median;
+
+    private Double standardDeviation;
+
+    private Object histogram;
+
+}
diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/SiUnitDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/SiUnitDto.java
new file mode 100644
index 0000000000..8a776c6fff
--- /dev/null
+++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/SiUnitDto.java
@@ -0,0 +1,5 @@
+package at.tuwien.dto.table.columns;
+
+public enum SiUnitDto {
+    SECOND, METER, KILOGRAM, AMPERE, KELVIN, MOLE, CANDELA
+}
diff --git a/fda-database-managing-service/gateways/pom.xml b/fda-database-managing-service/gateways/pom.xml
index 003e4d8680..a142493776 100644
--- a/fda-database-managing-service/gateways/pom.xml
+++ b/fda-database-managing-service/gateways/pom.xml
@@ -10,7 +10,7 @@
     </parent>
 
     <artifactId>gateways</artifactId>
-    <version>${global.version}</version>
+    <version>0.0.1-SNAPSHOT</version>
     <name>fda-database-managing-service-gateways</name>
 
     <properties>
@@ -22,7 +22,7 @@
         <dependency>
             <groupId>at.tuwien</groupId>
             <artifactId>api</artifactId>
-            <version>${global.version}</version>
+            <version>0.0.1-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
     </dependencies>
diff --git a/fda-database-managing-service/gateways/src/main/java/at/tuwien/clients/FdaContainerManagingClient.java b/fda-database-managing-service/gateways/src/main/java/at/tuwien/clients/FdaContainerManagingClient.java
index ba94a6fc7f..d5e4051ac0 100644
--- a/fda-database-managing-service/gateways/src/main/java/at/tuwien/clients/FdaContainerManagingClient.java
+++ b/fda-database-managing-service/gateways/src/main/java/at/tuwien/clients/FdaContainerManagingClient.java
@@ -1,6 +1,6 @@
 package at.tuwien.clients;
 
-import at.tuwien.dto.CreateDatabaseDTO;
+import at.tuwien.dto.database.DatabaseCreateDto;
 import at.tuwien.model.Database;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -20,14 +20,14 @@ public class FdaContainerManagingClient {
     @Autowired
     private WebClient.Builder webClientBuilder;
 
-    public boolean createDatabaseContainer(CreateDatabaseDTO dto)  {
+    public boolean createDatabaseContainer(DatabaseCreateDto dto)  {
         LOGGER.debug("request fda-container-managing service for createDatabaseContainer");
         ClientResponse clientResponse = webClientBuilder
                 .build()
                 .post()
                 .uri("http://fda-container-managing/at.tuwien.api/createDatabaseContainer")
                 .contentType(MediaType.APPLICATION_JSON)
-                .body(Mono.just(dto), CreateDatabaseDTO.class)
+                .body(Mono.just(dto), DatabaseCreateDto.class)
                 .exchange()
                 .block();
 
diff --git a/fda-database-managing-service/pom.xml b/fda-database-managing-service/pom.xml
index 5c7d147aa2..2e63b889d3 100644
--- a/fda-database-managing-service/pom.xml
+++ b/fda-database-managing-service/pom.xml
@@ -10,7 +10,7 @@
 
     <groupId>at.tuwien</groupId>
     <artifactId>fda-database-managing-service</artifactId>
-    <version>${global.version}</version>
+    <version>0.0.1-SNAPSHOT</version>
     <name>fda-database-managing-service</name>
     <description>Demo project for Spring Boot</description>
 
@@ -23,7 +23,6 @@
     </modules>
 
     <properties>
-        <global.version>0.0.1-SNAPSHOT</global.version>
         <java.version>11</java.version>
         <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
         <mapstruct.version>1.4.2.Final</mapstruct.version>
diff --git a/fda-database-managing-service/rest-service/pom.xml b/fda-database-managing-service/rest-service/pom.xml
index b6d550946a..fb89aa38b4 100644
--- a/fda-database-managing-service/rest-service/pom.xml
+++ b/fda-database-managing-service/rest-service/pom.xml
@@ -10,14 +10,14 @@
     </parent>
 
     <artifactId>rest-service</artifactId>
-    <version>${global.version}</version>
+    <version>0.0.1-SNAPSHOT</version>
     <name>fda-database-managing-service-rest-services</name>
 
     <dependencies>
         <dependency>
             <groupId>at.tuwien</groupId>
             <artifactId>services</artifactId>
-            <version>${global.version}</version>
+            <version>0.0.1-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
     </dependencies>
diff --git a/fda-database-managing-service/rest-service/src/main/java/at/tuwien/controller/DatabaseController.java b/fda-database-managing-service/rest-service/src/main/java/at/tuwien/controller/DatabaseController.java
deleted file mode 100644
index 39afb24610..0000000000
--- a/fda-database-managing-service/rest-service/src/main/java/at/tuwien/controller/DatabaseController.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package at.tuwien.controller;
-
-import at.tuwien.dto.CreateDatabaseDTO;
-import at.tuwien.model.Database;
-import at.tuwien.service.DatabaseService;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@RestController
-@RequestMapping("/database")
-public class DatabaseController {
-    private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseController.class);
-
-    private DatabaseService service;
-
-    @Autowired
-    public DatabaseController(DatabaseService service) {
-        this.service = service;
-    }
-
-    @PostMapping("/createDatabase")
-    @ApiOperation(value = "creating a new database")
-    public ResponseEntity createDatabase(@RequestBody CreateDatabaseDTO dto) {
-//        LOGGER.debug("creating new database");
-//        boolean succeed = service.createDatabase(dto);
-//        if (succeed) {
-//            return Response
-//                    .status(Response.Status.CREATED)
-//                    .entity("Database container successfully created and started!")
-//                    .type(MediaType.APPLICATION_JSON)
-//                    .build();
-//        }
-//        return Response
-//                .status(Response.Status.INTERNAL_SERVER_ERROR)
-//                .type(MediaType.APPLICATION_JSON)
-//                .build();
-        return null;
-    }
-
-
-    @GetMapping("/listDatabases")
-    public List<Database> listDatabases() {
-//        LOGGER.debug("getting a list of created databases");
-//        return service.findAllCreatedDatabases();
-        return null;
-    }
-
-
-}
diff --git a/fda-database-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseController.java b/fda-database-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseController.java
new file mode 100644
index 0000000000..ba47aad845
--- /dev/null
+++ b/fda-database-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseController.java
@@ -0,0 +1,75 @@
+package at.tuwien.endpoints;
+
+import at.tuwien.dto.database.DatabaseBriefDto;
+import at.tuwien.dto.database.DatabaseCreateDto;
+import at.tuwien.dto.database.DatabaseChangeDto;
+import at.tuwien.dto.database.DatabaseDto;
+import at.tuwien.service.DatabaseService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api")
+public class DatabaseController {
+
+    private final DatabaseService databaseService;
+
+    @Autowired
+    public DatabaseController(DatabaseService databaseService) {
+        this.databaseService = databaseService;
+    }
+
+    @GetMapping("/database")
+    @ApiOperation(value = "List all databases", notes = "Currently a container supports only databases of the same image, e.g. there is one PostgreSQL engine running with multiple databases inside a container.")
+    public ResponseEntity<List<DatabaseBriefDto>> findAll() {
+//        LOGGER.debug("getting a list of created databases");
+//        return service.findAllCreatedDatabases();
+        return null;
+    }
+
+    @PostMapping("/database")
+    @ApiOperation(value = "Creates a new database", notes = "Creates a new database in a container")
+    public ResponseEntity<DatabaseDto> create(@RequestBody DatabaseCreateDto dto) {
+//        LOGGER.debug("creating new database");
+//        boolean succeed = service.createDatabase(dto);
+//        if (succeed) {
+//            return Response
+//                    .status(Response.Status.CREATED)
+//                    .entity("Database container successfully created and started!")
+//                    .type(MediaType.APPLICATION_JSON)
+//                    .build();
+//        }
+//        return Response
+//                .status(Response.Status.INTERNAL_SERVER_ERROR)
+//                .type(MediaType.APPLICATION_JSON)
+//                .build();
+        return ResponseEntity.status(HttpStatus.CREATED)
+                .build();
+    }
+
+    @GetMapping("/database/{id}")
+    @ApiOperation(value = "Get all informations about a database")
+    public ResponseEntity<DatabaseDto> findById(@RequestParam String id) {
+        return null;
+    }
+
+    @PutMapping("/database/{id}")
+    @ApiOperation(value = "Change the state of a database")
+    public ResponseEntity<DatabaseDto> modify(@RequestParam String id, @RequestBody DatabaseChangeDto changeDto) {
+        return ResponseEntity.status(HttpStatus.ACCEPTED)
+                .build();
+    }
+
+    @DeleteMapping("/database/{id}")
+    @ApiOperation(value = "Delete a database")
+    public ResponseEntity delete(@RequestParam String id) {
+        return ResponseEntity.status(HttpStatus.OK)
+                .build();
+    }
+
+}
diff --git a/fda-database-managing-service/rest-service/src/main/java/at/tuwien/endpoints/TableController.java b/fda-database-managing-service/rest-service/src/main/java/at/tuwien/endpoints/TableController.java
new file mode 100644
index 0000000000..7a4349b995
--- /dev/null
+++ b/fda-database-managing-service/rest-service/src/main/java/at/tuwien/endpoints/TableController.java
@@ -0,0 +1,74 @@
+package at.tuwien.endpoints;
+
+import at.tuwien.dto.database.DatabaseChangeDto;
+import at.tuwien.dto.database.DatabaseCreateDto;
+import at.tuwien.dto.table.TableBriefDto;
+import at.tuwien.dto.table.TableDto;
+import at.tuwien.model.Database;
+import at.tuwien.service.DatabaseService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/database/{id}")
+public class TableController {
+
+    private final DatabaseService databaseService;
+
+    @Autowired
+    public TableController(DatabaseService databaseService) {
+        this.databaseService = databaseService;
+    }
+
+    @GetMapping("/table")
+    @ApiOperation(value = "List all database tables")
+    public ResponseEntity<List<TableBriefDto>> findAll(@RequestParam String id) {
+        return null;
+    }
+
+    @PostMapping("/table")
+    @ApiOperation(value = "Creates a new database table", notes = "Creates a new database table in a container")
+    public ResponseEntity create(@RequestParam String id, @RequestBody DatabaseCreateDto dto) {
+//        LOGGER.debug("creating new database");
+//        boolean succeed = service.createDatabase(dto);
+//        if (succeed) {
+//            return Response
+//                    .status(Response.Status.CREATED)
+//                    .entity("Database container successfully created and started!")
+//                    .type(MediaType.APPLICATION_JSON)
+//                    .build();
+//        }
+//        return Response
+//                .status(Response.Status.INTERNAL_SERVER_ERROR)
+//                .type(MediaType.APPLICATION_JSON)
+//                .build();
+        return ResponseEntity.status(HttpStatus.CREATED)
+                .build();
+    }
+
+    @GetMapping("/table/{tid}")
+    @ApiOperation(value = "Get all informations about a database table")
+    public ResponseEntity<TableDto> findById(@RequestParam String id, @RequestParam String tid) {
+        return null;
+    }
+
+    @PutMapping("/table/{tid}")
+    @ApiOperation(value = "Change the state of a database table")
+    public ResponseEntity<?> modify(@RequestParam String id, @RequestParam String tid, @RequestBody DatabaseChangeDto changeDto) {
+        return ResponseEntity.status(HttpStatus.ACCEPTED)
+                .build();
+    }
+
+    @DeleteMapping("/table/{tid}")
+    @ApiOperation(value = "Delete a database table")
+    public ResponseEntity delete(@RequestParam String id, @RequestParam String tid) {
+        return ResponseEntity.status(HttpStatus.OK)
+                .build();
+    }
+
+}
diff --git a/fda-database-managing-service/services/pom.xml b/fda-database-managing-service/services/pom.xml
index 932e1c4e09..4a4429affe 100644
--- a/fda-database-managing-service/services/pom.xml
+++ b/fda-database-managing-service/services/pom.xml
@@ -10,20 +10,20 @@
     </parent>
 
     <artifactId>services</artifactId>
-    <version>${global.version}</version>
+    <version>0.0.1-SNAPSHOT</version>
     <name>fda-database-managing-service-services</name>
 
     <dependencies>
         <dependency>
             <groupId>at.tuwien</groupId>
             <artifactId>gateways</artifactId>
-            <version>${global.version}</version>
+            <version>0.0.1-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>at.tuwien</groupId>
             <artifactId>api</artifactId>
-            <version>${global.version}</version>
+            <version>0.0.1-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
     </dependencies>
diff --git a/fda-database-managing-service/services/src/main/java/at/tuwien/entity/Auditable.java b/fda-database-managing-service/services/src/main/java/at/tuwien/entity/Auditable.java
new file mode 100644
index 0000000000..db1840b0f3
--- /dev/null
+++ b/fda-database-managing-service/services/src/main/java/at/tuwien/entity/Auditable.java
@@ -0,0 +1,37 @@
+package at.tuwien.entity;
+
+import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Parameter;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.*;
+import java.time.Instant;
+
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+@ToString(onlyExplicitlyIncluded = true)
+@MappedSuperclass
+@EntityListeners(AuditingEntityListener.class)
+public abstract class Auditable {
+
+    @Id
+    @EqualsAndHashCode.Include
+    @ToString.Include
+    @GeneratedValue(generator = "sequence-per-entity")
+    @GenericGenerator(
+            name = "sequence-per-entity",
+            strategy = "enhanced-sequence",
+            parameters = @Parameter(name = "prefer_sequence_per_entity", value = "true")
+    )
+    private Long id;
+
+    @Column(nullable = false, updatable = false)
+    @CreatedDate
+    private Instant created;
+
+    @Column
+    @LastModifiedDate
+    private Instant lastModified;
+}
\ No newline at end of file
diff --git a/fda-database-managing-service/services/src/main/java/at/tuwien/entity/Database.java b/fda-database-managing-service/services/src/main/java/at/tuwien/entity/Database.java
new file mode 100644
index 0000000000..065825050f
--- /dev/null
+++ b/fda-database-managing-service/services/src/main/java/at/tuwien/entity/Database.java
@@ -0,0 +1,34 @@
+package at.tuwien.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import java.util.List;
+
+@Entity
+@Data
+@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
+@ToString(callSuper = true, onlyExplicitlyIncluded = true)
+public class Database extends Auditable {
+
+    @Column(nullable = false)
+    private String containerId;
+
+    @Column(nullable = false)
+    private String name;
+
+    @Column(nullable = false)
+    private Boolean isPublic;
+
+    @OneToOne
+    private View view;
+
+    @OneToMany
+    private List<Table> tables;
+
+}
diff --git a/fda-database-managing-service/services/src/main/java/at/tuwien/entity/Table.java b/fda-database-managing-service/services/src/main/java/at/tuwien/entity/Table.java
new file mode 100644
index 0000000000..713b170236
--- /dev/null
+++ b/fda-database-managing-service/services/src/main/java/at/tuwien/entity/Table.java
@@ -0,0 +1,22 @@
+package at.tuwien.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import java.util.List;
+
+@Entity
+@Data
+@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
+@ToString(callSuper = true, onlyExplicitlyIncluded = true)
+public class Table extends Auditable {
+
+    @OneToOne
+    private Database database;
+
+}
diff --git a/fda-database-managing-service/services/src/main/java/at/tuwien/entity/View.java b/fda-database-managing-service/services/src/main/java/at/tuwien/entity/View.java
new file mode 100644
index 0000000000..fc9a313977
--- /dev/null
+++ b/fda-database-managing-service/services/src/main/java/at/tuwien/entity/View.java
@@ -0,0 +1,24 @@
+package at.tuwien.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import java.util.List;
+
+@Entity
+@Data
+@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
+@ToString(callSuper = true, onlyExplicitlyIncluded = true)
+public class View extends Auditable {
+
+    @Column
+    private String name;
+
+    @OneToMany
+    private List<Database> databases;
+
+}
diff --git a/fda-database-managing-service/services/src/main/java/at/tuwien/repository/DatabaseRepository.java b/fda-database-managing-service/services/src/main/java/at/tuwien/repository/DatabaseRepository.java
new file mode 100644
index 0000000000..917cf3f68f
--- /dev/null
+++ b/fda-database-managing-service/services/src/main/java/at/tuwien/repository/DatabaseRepository.java
@@ -0,0 +1,7 @@
+package at.tuwien.repository;
+
+import at.tuwien.entity.Database;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface DatabaseRepository extends JpaRepository<Database, Long> {
+}
diff --git a/fda-database-managing-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/fda-database-managing-service/services/src/main/java/at/tuwien/service/DatabaseService.java
index 2a781ddf0f..bd836421d8 100644
--- a/fda-database-managing-service/services/src/main/java/at/tuwien/service/DatabaseService.java
+++ b/fda-database-managing-service/services/src/main/java/at/tuwien/service/DatabaseService.java
@@ -1,7 +1,7 @@
 package at.tuwien.service;
 
 import at.tuwien.clients.FdaContainerManagingClient;
-import at.tuwien.dto.CreateDatabaseDTO;
+import at.tuwien.dto.database.DatabaseCreateDto;
 import at.tuwien.model.Database;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -18,7 +18,7 @@ public class DatabaseService {
         this.client = client;
     }
 
-    public boolean createDatabase(CreateDatabaseDTO dto) {
+    public boolean createDatabase(DatabaseCreateDto dto) {
         return client.createDatabaseContainer(dto);
     }
 
-- 
GitLab