diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3fa76039bda9a625017ec11048fbf81fec37e7ab..b413b499ff81f3d9fea4a02ce36ec5fab531d264 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,6 @@ image: docker/compose:latest before_script: - docker version - docker-compose version - - mvn --version - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY cache: @@ -29,7 +28,7 @@ build: test-backend: stage: test script: - - mvn -f fda-container-managing-service/pom.xml clean test + - echo "todo" test-frontend: stage: test @@ -71,7 +70,7 @@ production: - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config - echo "$PROD_SSH_PRIVATE_KEY" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - - scp docker-compose.dbrepo.yml $PROD_SSH_HOST:~/deployment/docker-compose.yml + - scp docker-compose.dev.yml $PROD_SSH_HOST:~/deployment/docker-compose.yml - ssh $PROD_SSH_HOST "docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY" - ssh $PROD_SSH_HOST "docker-compose -f ~/deployment/docker-compose.yml pull" - ssh $PROD_SSH_HOST "docker-compose -f ~/deployment/docker-compose.yml -p 'fda' down" diff --git a/README.md b/README.md index 81e7a04d84cfe9f5f5f11bd2930d228193e8850d..bcba0ff3e1df3f439eaa0b8bbee232a4e67e6e14 100644 --- a/README.md +++ b/README.md @@ -42,19 +42,12 @@ Everything is handled by compose, just build it by running: 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://localhost:<port>/swagger-resources` - -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 The pipeline is set-up to build and test all commits. A commit to dev or master branch triggers additional jobs. +### Development + A commit to `dev` triggers the following pipeline. It deploys the docker images to the docker registry hosted on the fda-runner server and deploys it also to a test server (fda-deployment) at TU Wien.  diff --git a/docker-compose.dbrepo.yml b/docker-compose.dev.yml similarity index 99% rename from docker-compose.dbrepo.yml rename to docker-compose.dev.yml index 7e1cc17cc339b5584ac79916a30fba8a9cdbf7a3..175b9419e869dd5f1acaacbca59bcfa33e22d90c 100644 --- a/docker-compose.dbrepo.yml +++ b/docker-compose.dev.yml @@ -139,7 +139,7 @@ services: hostname: fda-ui image: docker.martinweise.at/fda-ui:latest ports: - - 80:3000 + - 3000:3000 links: - fda-discovery-server - fda-container-managing-service diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000000000000000000000000000000000000..9bc0dc63a86565730531f02c2e553e4290e2fec7 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,152 @@ +version: "3.6" + +services: + + fda-discovery-server: + container_name: fda-discovery-server + hostname: fda-discovery-server + image: docker.martinweise.at/fda-discovery-server:stable + environment: + SPRING_PROFILES_ACTIVE: docker + network_mode: bridge + ports: + - 9090:9090 + + fda-gateway-service: + container_name: fda-gateway-service + hostname: fda-gateway-service + image: docker.martinweise.at/fda-gateway-service:stable + network_mode: bridge + environment: + SPRING_PROFILES_ACTIVE: docker + ports: + - 9095:9095 + links: + - fda-discovery-server + - fda-database-managing-service + - fda-container-managing-service + - fda-query-service + - fda-table-service + depends_on: + - fda-discovery-server + - fda-database-managing-service + - fda-container-managing-service + - fda-query-service + - fda-table-service + logging: + driver: json-file + + fda-database-managing-service: + container_name: fda-database-managing-service + hostname: fda-database-managing-service + image: docker.martinweise.at/fda-database-managing-service:stable + network_mode: bridge + environment: + SPRING_PROFILES_ACTIVE: docker + ports: + - 9092:9092 + links: + - fda-discovery-server + - fda-container-managing-service + depends_on: + - fda-discovery-server + - fda-container-managing-service + logging: + driver: json-file + + fda-container-managing-service: + container_name: fda-container-managing-service + hostname: fda-container-managing-service + image: docker.martinweise.at/fda-container-managing-service:stable + network_mode: bridge + environment: + SPRING_PROFILES_ACTIVE: docker + ports: + - 9091:9091 + volumes: + - /var/run/docker.sock:/var/run/docker.sock + links: + - fda-discovery-server + depends_on: + - fda-discovery-server + logging: + driver: json-file + + fda-query-service: + container_name: fda-query-service + hostname: fda-query-service + image: docker.martinweise.at/fda-query-service:stable + network_mode: bridge + environment: + SPRING_PROFILES_ACTIVE: docker + ports: + - 9093:9093 + volumes: + - /tmp:/tmp + links: + - fda-discovery-server + - fda-container-managing-service + depends_on: + - fda-discovery-server + - fda-container-managing-service + logging: + driver: json-file + + fda-table-service: + container_name: fda-table-service + hostname: fda-table-service + image: docker.martinweise.at/fda-table-service:stable + network_mode: bridge + environment: + SPRING_PROFILES_ACTIVE: docker + multipart.location: /tmp + ports: + - 9094:9094 + volumes: + - /tmp:/tmp + links: + - fda-discovery-server + - fda-query-service + - fda-analyse-service + depends_on: + - fda-discovery-server + + fda-analyse-service: + container_name: fda-analyse-service + hostname: fda-analyse-service + image: docker.martinweise.at/fda-analyse-service:stable + network_mode: bridge + command: sh -c "/wait && flask run" + environment: + EUREKA_SERVER: http://fda-discovery-server:9090/eureka + WAIT_HOSTS: fda-discovery-server:9090 + WAIT_HOSTS_TIMEOUT: 600 + WAIT_SLEEP_INTERVAL: 30 + WAIT_HOST_CONNECT_TIMEOUT: 30 + ports: + - 5000:5000 + volumes: + - /tmp:/tmp + links: + - fda-discovery-server + depends_on: + - fda-discovery-server + logging: + driver: json-file + + fda-ui: + container_name: fda-ui + hostname: fda-ui + image: docker.martinweise.at/fda-ui:stable + ports: + - 3000:3000 + links: + - fda-discovery-server + - fda-container-managing-service + - fda-query-service + - fda-analyse-service + depends_on: + - fda-discovery-server + environment: + HOST: 0.0.0.0 + API_URL: //fda-database-managing-service:9092/api diff --git a/docker-compose.yml b/docker-compose.yml index 2cab4c936cfe29b6f1803684d8917819634ff5d0..9ecf51f497fcce447b05ae021e1331413f3bb2ba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,27 +1,8 @@ version: "3.6" -volumes: - fda-metadata-db-data: - services: - fda-metadata-db: - restart: always - container_name: fda-metadata-db - hostname: fda-metadata-db - image: postgres:13-alpine - volumes: - - fda-metadata-db-data:/var/lib/postgresql/data - network_mode: bridge - ports: - - 5432:5432 - environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: fda - fda-discovery-server: - restart: always container_name: fda-discovery-server hostname: fda-discovery-server build: ./fda-discovery-server @@ -33,7 +14,6 @@ services: - 9090:9090 fda-gateway-service: - restart: always container_name: fda-gateway-service hostname: fda-gateway-service build: ./fda-gateway-service @@ -51,11 +31,14 @@ services: - fda-table-service depends_on: - fda-discovery-server + - fda-database-managing-service + - fda-container-managing-service + - fda-query-service + - fda-table-service logging: driver: json-file fda-database-managing-service: - restart: always container_name: fda-database-managing-service hostname: fda-database-managing-service build: @@ -69,16 +52,13 @@ services: links: - fda-discovery-server - fda-container-managing-service - - fda-metadata-db depends_on: - fda-discovery-server - fda-container-managing-service - - fda-metadata-db logging: driver: json-file fda-container-managing-service: - restart: always container_name: fda-container-managing-service hostname: fda-container-managing-service build: ./fda-container-managing-service @@ -92,15 +72,12 @@ services: - /var/run/docker.sock:/var/run/docker.sock links: - fda-discovery-server - - fda-metadata-db depends_on: - fda-discovery-server - - fda-metadata-db logging: driver: json-file fda-query-service: - restart: always container_name: fda-query-service hostname: fda-query-service build: ./fda-query-service @@ -122,7 +99,6 @@ services: driver: json-file fda-table-service: - restart: always container_name: fda-table-service hostname: fda-table-service build: ./fda-table-service @@ -137,11 +113,12 @@ services: - /tmp:/tmp links: - fda-discovery-server + - fda-query-service + - fda-analyse-service depends_on: - fda-discovery-server fda-analyse-service: - restart: always container_name: fda-analyse-service hostname: fda-analyse-service build: ./fda-analyse-service @@ -166,16 +143,19 @@ services: driver: json-file fda-ui: - restart: always container_name: fda-ui hostname: fda-ui build: ./fda-ui image: fda-ui ports: - 3000:3000 - depends_on: + links: + - fda-discovery-server - fda-container-managing-service - - fda-database-managing-service + - fda-query-service + - fda-analyse-service + depends_on: + - fda-discovery-server environment: HOST: 0.0.0.0 API_URL: //fda-database-managing-service:9092/api diff --git a/fda-analyse-service/createMDB.py b/fda-analyse-service/createMDB.py index 2c9e20eeef2da94709aea95daee339958cca483a..b08054121e33992f05820c57e79c080ed0590379 100644 --- a/fda-analyse-service/createMDB.py +++ b/fda-analyse-service/createMDB.py @@ -29,7 +29,7 @@ cursor = conn.cursor() cursor.execute(f"""CREATE SEQUENCE seq_data; CREATE SEQUENCE seq_user; -CREATE TABLE md_DATA ( +CREATE TABLE DATA ( ID INTEGER PRIMARY KEY DEFAULT nextval('seq_data'), PROVENANCE TEXT, FileEncoding TEXT, @@ -38,17 +38,17 @@ CREATE TABLE md_DATA ( Seperator TEXT ); -CREATE TABLE md_USERS ( +CREATE TABLE USERS ( UserID INTEGER PRIMARY KEY DEFAULT nextval('seq_user'), Name VARCHAR(50) ); -CREATE TABLE md_CONTACTPERSON ( - cUserID INTEGER PRIMARY KEY REFERENCES md_USERS(UserID), +CREATE TABLE CONTACTPERSON ( + cUserID INTEGER PRIMARY KEY REFERENCES USERS(UserID), Email TEXT ); -CREATE TABLE md_DATABASES ( +CREATE TABLE DATABASES ( DBID TEXT PRIMARY KEY, -- (= DockerContainer ID) Title VARCHAR(50), ResourceType TEXT, @@ -57,11 +57,11 @@ CREATE TABLE md_DATABASES ( Publisher VARCHAR(50), Year DATE DEFAULT CURRENT_DATE, Open BOOLEAN DEFAULT TRUE, - Contact INTEGER REFERENCES md_CONTACTPERSON(cUserID) + Contact INTEGER REFERENCES CONTACTPERSON(cUserID) ); -CREATE TABLE md_TABLES ( - tDBID TEXT REFERENCES md_DATABASES(DBID), +CREATE TABLE TABLES ( + tDBID TEXT REFERENCES DATABASES(DBID), tName VARCHAR(50), NumCols INTEGER, NumRows INTEGER, @@ -69,7 +69,7 @@ CREATE TABLE md_TABLES ( PRIMARY KEY(tDBID,tName) ); -CREATE TABLE md_COLUMNS ( +CREATE TABLE COLUMNS ( cDBID TEXT NOT NULL, tName VARCHAR(50) NOT NULL, cName VARCHAR(50), @@ -77,12 +77,12 @@ CREATE TABLE md_COLUMNS ( SIunit TEXT, MaxVal NUMERIC, MinVal NUMERIC , - FOREIGN KEY (cDBID,tName) REFERENCES md_TABLES(tDBID,tName), + FOREIGN KEY (cDBID,tName) REFERENCES TABLES(tDBID,tName), PRIMARY KEY(cDBID, tName, cName) ); -CREATE TABLE md_VIEW ( - vDBID TEXT REFERENCES md_DATABASES(DBID), +CREATE TABLE VIEW ( + vDBID TEXT REFERENCES Databases(DBID), vName VARCHAR(50), Query TEXT, Public BOOLEAN , @@ -91,28 +91,28 @@ CREATE TABLE md_VIEW ( PRIMARY KEY (vDBID,vName) ); -CREATE TABLE md_feed ( +CREATE TABLE feed ( fDBID TEXT, fName VARCHAR(50), - fUserId INTEGER REFERENCES md_USERS(UserID), - fDataID INTEGER REFERENCES md_DATA(ID), - FOREIGN KEY (fDBID,fName) REFERENCES md_TABLES(tDBID,tNAME), + fUserId INTEGER REFERENCES USERS(UserID), + fDataID INTEGER REFERENCES DATA(ID), + FOREIGN KEY (fDBID,fName) REFERENCES TABLES(tDBID,tNAME), PRIMARY KEY (fDBID,fName,fUserId, fDataID) ); -CREATE TABLE md_update ( - uUserID INTEGER REFERENCES md_USERS(UserID), - uDBID TEXT REFERENCES md_DATABASES(DBID), +CREATE TABLE update ( + uUserID INTEGER REFERENCES USERS(UserID), + uDBID TEXT REFERENCES Databases(DBID), PRIMARY KEY (uUserID,uDBID) ); -CREATE TABLE md_access ( - aUserID INTEGER REFERENCES md_USERS(UserID), - aDBID TEXT REFERENCES md_DATABASES(DBID), +CREATE TABLE access ( + aUserID INTEGER REFERENCES USERS(UserID), + aDBID TEXT REFERENCES Databases(DBID), attime TIMESTAMP, download BOOLEAN, PRIMARY KEY (aUserID, aDBID, attime, download) );""") conn.commit() -conn.close() +conn.close() \ No newline at end of file diff --git a/fda-container-managing-service/Dockerfile b/fda-container-managing-service/Dockerfile index 752040d2a09c1d9ae5a68cf71abf0fc6b458d9d9..231bd8a4752d008387e374d4e7fb8256c07c5e78 100644 --- a/fda-container-managing-service/Dockerfile +++ b/fda-container-managing-service/Dockerfile @@ -10,13 +10,13 @@ COPY ./api ./api COPY ./rest-service ./rest-service COPY ./services ./services -RUN mvn -q clean package -DskipTests +RUN mvn -q clean package > /dev/null ###### SECOND STAGE ###### FROM openjdk:11-jre-slim as runtime -COPY --from=build ./rest-service/target/rest-service-*.jar ./rest-service.jar +COPY --from=build ./rest-service/target/fda-container-managing-service-*.jar ./rest.jar EXPOSE 9091 -ENTRYPOINT ["java", "-jar", "./rest-service.jar"] +ENTRYPOINT ["java", "-jar", "./rest.jar"] diff --git a/fda-container-managing-service/api/pom.xml b/fda-container-managing-service/api/pom.xml index 20bce4c2855a1146efb375c0f18408aa35b5652d..c4153c49c08140175f5e4d2b89e4e652e54e2389 100644 --- a/fda-container-managing-service/api/pom.xml +++ b/fda-container-managing-service/api/pom.xml @@ -2,22 +2,14 @@ <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> - <groupId>at.tuwien</groupId> <artifactId>fda-container-managing-service</artifactId> + <groupId>at.tuwien</groupId> <version>0.0.1-SNAPSHOT</version> </parent> + <modelVersion>4.0.0</modelVersion> <artifactId>api</artifactId> - <version>0.0.1-SNAPSHOT</version> - <name>fda-container-managing-service-api</name> - - <properties> - <maven.compiler.source>11</maven.compiler.source> - <maven.compiler.target>11</maven.compiler.target> - </properties> - <dependencies/> </project> \ No newline at end of file diff --git a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/IpAddressDto.java b/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/IpAddressDto.java deleted file mode 100644 index e201ce5dd1d89f0cac905dc4a3d643e1fb378265..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/IpAddressDto.java +++ /dev/null @@ -1,18 +0,0 @@ -package at.tuwien.api.dto; - -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import java.net.InetAddress; - -@Getter -@Setter -public class IpAddressDto { - - @NotNull - @Size(min = 7, max = 15) - private String ipv4; - -} diff --git a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerActionTypeDto.java b/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerActionTypeDto.java deleted file mode 100644 index 8e65548f2eaea7e208a89cc573b2e701922bc42a..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerActionTypeDto.java +++ /dev/null @@ -1,5 +0,0 @@ -package at.tuwien.api.dto.container; - -public enum ContainerActionTypeDto { - START, STOP, REMOVE -} diff --git a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerBriefDto.java b/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerBriefDto.java deleted file mode 100644 index bad77e86d0febb925cde4438f2cd975f3e1d1ba3..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerBriefDto.java +++ /dev/null @@ -1,22 +0,0 @@ -package at.tuwien.api.dto.container; - -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - -@Getter -@Setter -public class ContainerBriefDto { - - @NotNull - @Size(min = 64, max = 64) - private String id; - - @NotBlank - @Size(min = 3) - private String containerName; -} diff --git a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerChangeDto.java b/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerChangeDto.java deleted file mode 100644 index 6249be2ca474c3ba8d7610fd2fd4a9196a140ca2..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerChangeDto.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.api.dto.container; - -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotNull; - -@Getter -@Setter -public class ContainerChangeDto { - - @NotNull - private ContainerActionTypeDto action; - -} diff --git a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerCreateRequestDto.java b/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerCreateRequestDto.java deleted file mode 100644 index 2fe176af2a4909592cbe89ed028087c1ef5072e3..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerCreateRequestDto.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.api.dto.container; - -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; - -@Getter -@Setter -@Builder -public class ContainerCreateRequestDto { - - @NotBlank - @Size(min = 3) - private String containerName; - - @NotBlank - @Size(min = 3) - private String image; - -} diff --git a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerDto.java b/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerDto.java deleted file mode 100644 index e60438f3a81f75e37dd2601b39cb8600d5ba4e7f..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerDto.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.api.dto.container; - -import at.tuwien.api.dto.IpAddressDto; -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotNull; -import java.time.Instant; - -@Getter -@Setter -public class ContainerDto extends ContainerBriefDto { - - @NotNull - private ContainerStateDto status; - - @NotNull - private IpAddressDto ipAddress; - - @NotNull - private Instant created; - -} diff --git a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerStateDto.java b/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerStateDto.java deleted file mode 100644 index acd2aeab93c545277af3185d725fc628a73f10d9..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/ContainerStateDto.java +++ /dev/null @@ -1,8 +0,0 @@ -package at.tuwien.api.dto.container; - -import lombok.Getter; - -@Getter -public enum ContainerStateDto { - CREATED, RESTARTING, RUNNING, PAUSED, EXITED, DEAD -} diff --git a/fda-container-managing-service/api/src/main/java/at/tuwien/api/pom.xml b/fda-container-managing-service/api/src/main/java/at/tuwien/api/pom.xml deleted file mode 100644 index c4153c49c08140175f5e4d2b89e4e652e54e2389..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/api/src/main/java/at/tuwien/api/pom.xml +++ /dev/null @@ -1,15 +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"> - <parent> - <artifactId>fda-container-managing-service</artifactId> - <groupId>at.tuwien</groupId> - <version>0.0.1-SNAPSHOT</version> - </parent> - <modelVersion>4.0.0</modelVersion> - - <artifactId>api</artifactId> - - -</project> \ No newline at end of file diff --git a/fda-container-managing-service/api/src/main/java/at/tuwien/dto/CreateDatabaseConnectionDataDTO.java b/fda-container-managing-service/api/src/main/java/at/tuwien/dto/CreateDatabaseConnectionDataDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..5417c9cfdc9f6ca7914e28ce5b888104e9f45dfa --- /dev/null +++ b/fda-container-managing-service/api/src/main/java/at/tuwien/dto/CreateDatabaseConnectionDataDTO.java @@ -0,0 +1,17 @@ +package at.tuwien.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@AllArgsConstructor +@Getter +@Setter +public class CreateDatabaseConnectionDataDTO { + + @JsonProperty("IpAddress") + private String ipAddress; + @JsonProperty("DatabaseName") + private String dbName; +} diff --git a/fda-container-managing-service/api/src/main/java/at/tuwien/dto/CreateDatabaseContainerDTO.java b/fda-container-managing-service/api/src/main/java/at/tuwien/dto/CreateDatabaseContainerDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..012c42a0b71923b28f8b24508736e406096c81ad --- /dev/null +++ b/fda-container-managing-service/api/src/main/java/at/tuwien/dto/CreateDatabaseContainerDTO.java @@ -0,0 +1,18 @@ +package at.tuwien.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +public class CreateDatabaseContainerDTO { + + @JsonProperty("ContainerName") + private String containerName; + @JsonProperty("DatabaseName") + private String dbName; + +} diff --git a/fda-container-managing-service/pom.xml b/fda-container-managing-service/pom.xml index 63d74472546bbd73cf509da964a5b361c3ec4f07..3ad8c73d3a52a100ac3149d26729d846b02b5485 100644 --- a/fda-container-managing-service/pom.xml +++ b/fda-container-managing-service/pom.xml @@ -2,33 +2,27 @@ <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> + <packaging>pom</packaging> + <modules> + <module>rest-service</module> + <module>api</module> + <module>services</module> + </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>2.4.3</version> + <version>2.3.4.RELEASE</version> + <relativePath/> <!-- lookup parent from repository --> </parent> - <groupId>at.tuwien</groupId> <artifactId>fda-container-managing-service</artifactId> <version>0.0.1-SNAPSHOT</version> <name>fda-container-managing-service</name> <description>Demo project for Spring Boot</description> - <packaging>pom</packaging> - <modules> - <module>rest-service</module> - <module>api</module> - <module>services</module> - </modules> - <properties> <java.version>11</java.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version> - <mapstruct.version>1.4.2.Final</mapstruct.version> - <docker.version>3.2.7</docker.version> - <testcontainers.version>1.15.2</testcontainers.version> - <swagger.version>2.1.7</swagger.version> - <springfox.version>3.0.0</springfox.version> </properties> <dependencies> @@ -39,25 +33,7 @@ <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> - <version>3.0.1</version> - <exclusions> - <exclusion> - <groupId>javax.ws.rs</groupId> - <artifactId>jsr311-api</artifactId> - </exclusion> - </exclusions> </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <!-- DataSource --> - <dependency> - <groupId>org.postgresql</groupId> - <artifactId>postgresql</artifactId> - <scope>runtime</scope> - </dependency> - <!-- Testing --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> @@ -69,72 +45,21 @@ </exclusion> </exclusions> </dependency> - <!-- DTO --> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-spring-web</artifactId> - <version>2.9.2</version> - </dependency> - <!-- IDE --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> - <!-- Docker --> - <dependency> - <groupId>com.github.docker-java</groupId> - <artifactId>docker-java</artifactId> - <version>${docker.version}</version> - <exclusions> - <exclusion> - <groupId>javax.ws.rs</groupId> - <artifactId>jsr311-api</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.github.docker-java</groupId> - <artifactId>docker-java-transport-httpclient5</artifactId> - <version>${docker.version}</version> - </dependency> - <!-- Mapping --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - <optional>true</optional><!-- IntelliJ --> - </dependency> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - <version>${mapstruct.version}</version> - </dependency> - <!-- Swagger --> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-boot-starter</artifactId> - <version>${springfox.version}</version> - </dependency> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-swagger-ui</artifactId> - <version>${springfox.version}</version> - </dependency> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-spring-web</artifactId> - <version>${springfox.version}</version> - </dependency> - <dependency> - <groupId>io.swagger.core.v3</groupId> - <artifactId>swagger-annotations</artifactId> - <version>${swagger.version}</version> - </dependency> - <dependency> - <groupId>io.swagger.core.v3</groupId> - <artifactId>swagger-models</artifactId> - <version>${swagger.version}</version> - </dependency> </dependencies> + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-dependencies</artifactId> + <version>${spring-cloud.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> </project> diff --git a/fda-container-managing-service/rest-service/pom.xml b/fda-container-managing-service/rest-service/pom.xml index 829b177a9007b33197b311230e920b4990682fca..d9e3d3e1fd7e917be214060471e54c44586f0069 100644 --- a/fda-container-managing-service/rest-service/pom.xml +++ b/fda-container-managing-service/rest-service/pom.xml @@ -2,49 +2,46 @@ <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> - <groupId>at.tuwien</groupId> <artifactId>fda-container-managing-service</artifactId> + <groupId>at.tuwien</groupId> <version>0.0.1-SNAPSHOT</version> </parent> + <modelVersion>4.0.0</modelVersion> <artifactId>rest-service</artifactId> - <version>0.0.1-SNAPSHOT</version> - <name>fda-container-managing-service-rest-service</name> - - <properties> - <maven.compiler.source>11</maven.compiler.source> - <maven.compiler.target>11</maven.compiler.target> - </properties> - <dependencies> <dependency> <groupId>at.tuwien</groupId> <artifactId>services</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>${project.version}</version> </dependency> <dependency> <groupId>at.tuwien</groupId> <artifactId>api</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger2</artifactId> + <version>2.9.2</version> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger-ui</artifactId> + <version>2.9.2</version> </dependency> </dependencies> - <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- to make it exuteable with $ java -jar ./app.jar --> - </goals> - </execution> - </executions> + <configuration> + <finalName>${project.parent.artifactId}-${project.version}</finalName> + <mainClass>at.tuwien.application.FdaContainerManagingApplication</mainClass> + </configuration> </plugin> </plugins> </build> - </project> \ No newline at end of file diff --git a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/FdaContainerManagingApplication.java b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/FdaContainerManagingApplication.java deleted file mode 100644 index cbd6fc6a5edd50ed3426fe6865fff6e57ca9c8ca..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/FdaContainerManagingApplication.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import springfox.documentation.oas.annotations.EnableOpenApi; - -@SpringBootApplication -@EnableJpaAuditing -@EnableOpenApi -@EnableJpaRepositories(basePackages = {"at.tuwien.repository"}) -@EntityScan(basePackages = {"at.tuwien.entity"}) -public class FdaContainerManagingApplication { - - public static void main(String[] args) { - SpringApplication.run(FdaContainerManagingApplication.class, args); - } - -} diff --git a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/application/FdaContainerManagingApplication.java b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/application/FdaContainerManagingApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..102f07898e413c55a3beb5aadc624edb862c9c8a --- /dev/null +++ b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/application/FdaContainerManagingApplication.java @@ -0,0 +1,17 @@ +package at.tuwien.application; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@SpringBootApplication +@ComponentScan(basePackages = "at.tuwien") +@EnableSwagger2 +public class FdaContainerManagingApplication { + + public static void main(String[] args) { + SpringApplication.run(FdaContainerManagingApplication.class, args); + } + +} diff --git a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java index cf29e3519967d71c52e29335b331736b1b5f2cb6..2f28d7b2f6945c8b29e3009b947d076058fd9f83 100644 --- a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java +++ b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java @@ -3,7 +3,7 @@ package at.tuwien.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.PathSelectors; -import springfox.documentation.oas.annotations.EnableOpenApi; +import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; @@ -12,28 +12,29 @@ import springfox.documentation.spring.web.plugins.Docket; import java.util.Collections; @Configuration -@EnableOpenApi public class SwaggerConfig { - @Bean - public Docket databaseApi() { + public Docket swaggerConfiguration() { + return new Docket(DocumentationType.SWAGGER_2) - .groupName("container-api") - .apiInfo(apiInfo()) .select() - .paths(PathSelectors.ant("/api/**")) - .build(); + .paths(PathSelectors.ant("/api/*")) + .apis(RequestHandlerSelectors.basePackage("at.tuwien.controller")) + .build() + .apiInfo(apiInfo()); } private ApiInfo apiInfo() { return new ApiInfo("FDA-Container-Managing API", - "Service that can manage Docker containers", + "Service API for container managing", "1.0", null, - new Contact("Martin Weise", "https://informatics.tuwien.ac.at/people/martin-weise", "martin.weise@tuwien.ac.at"), + new Contact("Gökhan Dasdemir", "http://tuwien.at", "goekhan.dasdemir@tuwien.ac.at"), "API license", null, Collections.emptyList()); + + } } diff --git a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/controller/DatabaseContainerController.java b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/controller/DatabaseContainerController.java new file mode 100644 index 0000000000000000000000000000000000000000..12ea1cf4c59194914db45b7669cbafbdbc9df909 --- /dev/null +++ b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/controller/DatabaseContainerController.java @@ -0,0 +1,74 @@ +package at.tuwien.controller; + +import at.tuwien.dto.CreateDatabaseContainerDTO; +import at.tuwien.model.DatabaseContainer; +import at.tuwien.service.ContainerService; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.ws.rs.PathParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.List; + +@RestController +@RequestMapping("/api") +public class DatabaseContainerController { + private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseContainerController.class); + + private ContainerService service; + + @Autowired + public DatabaseContainerController(ContainerService service) { + this.service = service; + } + + @PostMapping("/createDatabaseContainer") + @ApiOperation("creating a new database container") + @ApiResponses({@ApiResponse(code = 201, message = "database container created")}) + public Response createDatabaseContainer(@RequestBody CreateDatabaseContainerDTO dto) { + LOGGER.debug("creating new database container"); + String containerId = service.createDatabaseContainer(dto); + return Response + .status(Response.Status.CREATED) + .entity("Database container with containerID: " + containerId + "successfully created and started!") + .type(MediaType.APPLICATION_JSON) + .build(); + } + + @GetMapping("/getDatabaseContainerByContainerID") + public DatabaseContainer getDatabaseContainerByContainerID(@RequestParam String containerID) { + LOGGER.debug("getting database container by containerID"); + return service.getDatabaseContainerByContainerID(containerID); + /* return Response + .status(Response.Status.FOUND) + .entity(connectionDataForDB) + .type(MediaType.APPLICATION_JSON) + .build();*/ + + } + + @GetMapping("/getCreatedDatabaseContainers") + public List<DatabaseContainer> getCreatedDatabaseContainers() { + LOGGER.debug("getting created database containers"); + return service.findAllDatabaseContainers(); + } + + public void startContainer(String containerID) { + //TODO + } + + public void stopContainer(String containerID) { + //TODO + } + + public void deleteDatabaseContainer(String containerID) { + //TODO + } + +} diff --git a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java deleted file mode 100644 index 361b11712c860152135f6bea965545414501cebd..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java +++ /dev/null @@ -1,121 +0,0 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.dto.container.ContainerChangeDto; -import at.tuwien.api.dto.container.ContainerBriefDto; -import at.tuwien.api.dto.container.ContainerDto; -import at.tuwien.api.dto.container.ContainerCreateRequestDto; -import at.tuwien.entity.Container; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.exception.DockerClientException; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.mapper.ContainerMapper; -import at.tuwien.service.ContainerService; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import java.util.List; -import java.util.stream.Collectors; - -import static at.tuwien.api.dto.container.ContainerActionTypeDto.*; - -@Log4j2 -@RestController -@RequestMapping("/api") -public class ContainerEndpoint { - - private final ContainerService containerService; - private final ContainerMapper containerMapper; - - @Autowired - public ContainerEndpoint(ContainerService containerService, ContainerMapper containerMapper) { - this.containerMapper = containerMapper; - this.containerService = containerService; - } - - @GetMapping("/container") - @ApiOperation(value = "List all containers", notes = "Lists the containers in the metadata database.") - @ApiResponses({ - @ApiResponse(code = 200, message = "All containers are listed."), - @ApiResponse(code = 401, message = "Not authorized to list all containers."), - }) - public ResponseEntity<List<ContainerBriefDto>> findAll() { - final List<Container> containers = containerService.getAll(); - return ResponseEntity.ok() - .body(containers.stream() - .map(containerMapper::containerToDatabaseContainerBriefDto) - .collect(Collectors.toList())); - } - - @PostMapping("/container") - @ApiOperation(value = "Creates a new container", notes = "Creates a new container whose image is registered in the metadata database too.") - @ApiResponses({ - @ApiResponse(code = 201, message = "Successfully created a new container."), - @ApiResponse(code = 400, message = "Malformed payload."), - @ApiResponse(code = 402, message = "Not authorized to create a container."), - }) - public ResponseEntity<ContainerDto> create(@Valid @RequestBody ContainerCreateRequestDto data) - throws ImageNotFoundException { - final Container container = containerService.create(data); - return ResponseEntity.status(HttpStatus.CREATED) - .body(containerMapper.containerToContainerDto(container)); - } - - @GetMapping("/container/{id}") - @ApiOperation(value = "Get all informations about a container", notes = "Since we follow the REST-principle, this method provides more information than the findAll method.") - @ApiResponses({ - @ApiResponse(code = 200, message = "Get information about container."), - @ApiResponse(code = 402, message = "Not authorized to get information about a container."), - @ApiResponse(code = 404, message = "No container found with this id in metadata database."), - }) - public ResponseEntity<ContainerDto> findById(@NotNull @RequestParam String id) throws ContainerNotFoundException { - final Container container = containerService.getById(id); - return ResponseEntity.ok() - .body(containerMapper.containerToContainerDto(container)); - } - - @PutMapping("/container/{id}") - @ApiOperation(value = "Change the state of a container", notes = "The new state can only be one of START/STOP/REMOVE.") - @ApiResponses({ - @ApiResponse(code = 201, message = "Changed the state of a container."), - @ApiResponse(code = 400, message = "Malformed payload."), - @ApiResponse(code = 402, message = "Not authorized to modify a container."), - @ApiResponse(code = 404, message = "No container found with this id in metadata database."), - }) - public ResponseEntity<?> modify(@NotNull @RequestParam String id, @Valid @RequestBody ContainerChangeDto changeDto) throws ContainerNotFoundException, DockerClientException { - if (changeDto.getAction().equals(START) || changeDto.getAction().equals(STOP) || changeDto.getAction().equals(REMOVE)) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .build(); - } - if (changeDto.getAction().equals(START)) { - containerService.start(id); - } else if (changeDto.getAction().equals(STOP)) { - containerService.stop(id); - } else if (changeDto.getAction().equals(REMOVE)) { - containerService.remove(id); - } - return ResponseEntity.status(HttpStatus.ACCEPTED) - .build(); - } - - @DeleteMapping("/container/{id}") - @ApiOperation(value = "Delete a container") - @ApiResponses({ - @ApiResponse(code = 200, message = "Deleted the container."), - @ApiResponse(code = 402, message = "Not authorized to delete a container."), - @ApiResponse(code = 404, message = "No container found with this id in metadata database."), - }) - public ResponseEntity delete(@NotNull @RequestParam String id) throws ContainerNotFoundException, DockerClientException { - containerService.remove(id); - return ResponseEntity.status(HttpStatus.OK) - .build(); - } - -} diff --git a/fda-container-managing-service/rest-service/src/main/resources/application-docker.properties b/fda-container-managing-service/rest-service/src/main/resources/application-docker.properties new file mode 100644 index 0000000000000000000000000000000000000000..670aed179dd18379145dce0f26bbf6073ad4fcd7 --- /dev/null +++ b/fda-container-managing-service/rest-service/src/main/resources/application-docker.properties @@ -0,0 +1,9 @@ +server.port=9091 +spring.application.name=fda-container-managing +spring.main.banner-mode=off +spring.cloud.loadbalancer.ribbon.enabled=false +logging.level.root=warn +logging.level.at.=info +logging.pattern.console=%d %highlight(%-5level): %msg%n +eureka.instance.hostname=fda-discovery-server +eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:9090/eureka/ \ No newline at end of file diff --git a/fda-container-managing-service/rest-service/src/main/resources/application-docker.yml b/fda-container-managing-service/rest-service/src/main/resources/application-docker.yml deleted file mode 100644 index c0115434bad4b09010b8ad0a0caf243ff73651e5..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/rest-service/src/main/resources/application-docker.yml +++ /dev/null @@ -1,25 +0,0 @@ -spring: - main.banner-mode: off - datasource: - url: jdbc:postgresql://fda-metadata-db:5432/fda - driver-class-name: org.postgresql.Driver - username: postgres - password: postgres - jpa: - show-sql: true - database-platform: org.hibernate.dialect.PostgreSQLDialect - hibernate: - ddl-auto: update - application: - name: fda-container-managing - cloud: - loadbalancer.ribbon.enabled: false -server.port: 9091 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.: info -eureka: - instance.hostname: fda-discovery-server - client.serviceUrl.defaultZone: http://${eureka.instance.hostname}:9090/eureka/ \ No newline at end of file diff --git a/fda-container-managing-service/rest-service/src/main/resources/application.properties b/fda-container-managing-service/rest-service/src/main/resources/application.properties new file mode 100644 index 0000000000000000000000000000000000000000..1d729f1bd2e3ef74e618ff12b764de602f9e2aab --- /dev/null +++ b/fda-container-managing-service/rest-service/src/main/resources/application.properties @@ -0,0 +1,3 @@ +spring.application.name=fda-container-managing +server.port=9091 +eureka.client.serviceUrl.defaultZone=http://localhost:9090/eureka/ \ No newline at end of file diff --git a/fda-container-managing-service/rest-service/src/main/resources/application.yml b/fda-container-managing-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index 41f5674804ffb8824a6e95e1b9bda591fd0aa1de..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,25 +0,0 @@ -spring: - main.banner-mode: off - datasource: - url: jdbc:postgresql://localhost:5432/fda - driver-class-name: org.postgresql.Driver - username: postgres - password: postgres - jpa: - show-sql: true - database-platform: org.hibernate.dialect.PostgreSQLDialect - hibernate: - ddl-auto: update - application: - name: fda-database-managing - cloud: - loadbalancer.ribbon.enabled: false -server.port: 9092 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.: debug -eureka: - instance.hostname: fda-discovery-server - client.serviceUrl.defaultZone: http://${eureka.instance.hostname}:9090/eureka/ \ No newline at end of file diff --git a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/BaseIntegrationTest.java b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/BaseIntegrationTest.java deleted file mode 100644 index e7d8e21487f837bf90f180d9e2849d13ab829552..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/BaseIntegrationTest.java +++ /dev/null @@ -1,89 +0,0 @@ -package at.tuwien; - -import at.tuwien.entity.Architecture; -import at.tuwien.entity.Container; -import at.tuwien.entity.ContainerImage; -import org.springframework.test.context.TestPropertySource; - -import java.math.BigInteger; -import java.time.Instant; -import java.util.Arrays; -import java.util.List; - -import static java.time.temporal.ChronoUnit.DAYS; -import static java.time.temporal.ChronoUnit.HOURS; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class BaseIntegrationTest { - - public final String IMAGE_1_REPOSITORY = "postgres"; - public final String IMAGE_1_TAG = "13-alpine"; - public final String IMAGE_1_HASH = "83b40f2726e5"; - public final Integer IMAGE_1_PORT = 5432; - public final BigInteger IMAGE_1_SIZE = new BigInteger("160000000"); - public final Instant IMAGE_1_BUILT = Instant.now().minus(40, HOURS); - public final List<String> IMAGE_1_ENV = Arrays.asList("POSTGRES_USER=postgres", "POSTGRES_PASSWORD=postgres"); - - public final String IMAGE_2_REPOSITORY = "redis"; - public final String IMAGE_2_TAG = "latest"; - public final String IMAGE_2_HASH = "f877e80bb9ef"; - public final Integer IMAGE_2_PORT = 6379; - public final BigInteger IMAGE_2_SIZE = new BigInteger("105000000"); - public final Instant IMAGE_2_BUILT = Instant.now().minus(9, DAYS); - public final List<String> IMAGE_2_ENV = Arrays.asList(); - -// public final ContainerImage IMAGE_1 = ContainerImage.builder() -// .repository(IMAGE_1_REPOSITORY) -// .tag(IMAGE_1_TAG) -// .hash(IMAGE_1_HASH) -// .size(IMAGE_1_SIZE) -// .built(IMAGE_1_BUILT) -// .environment(IMAGE_1_ENV) -// .defaultPort(IMAGE_1_PORT) -// .architecture(Architecture.LINUX_AMD64) -// .build(); -// -// public final ContainerImage IMAGE_2 = ContainerImage.builder() -// .repository(IMAGE_2_REPOSITORY) -// .tag(IMAGE_2_TAG) -// .hash(IMAGE_2_HASH) -// .size(IMAGE_2_SIZE) -// .built(IMAGE_2_BUILT) -// .environment(IMAGE_2_ENV) -// .defaultPort(IMAGE_2_PORT) -// .architecture(Architecture.LINUX_AMD64) -// .build(); -// -// public final String CONTAINER_1_ID = "deadbeef"; -// public final ContainerImage CONTAINER_1_IMAGE = IMAGE_1; -// public final String CONTAINER_1_NAME = "u01"; -// public final String CONTAINER_1_DATABASE = "univie"; -// public final String CONTAINER_1_IP = "231.145.98.83"; -// public final Instant CONTAINER_1_CREATED = Instant.now().minus(1, HOURS); -// -// public final String CONTAINER_2_ID = "0ff1ce"; -// public final ContainerImage CONTAINER_2_IMAGE = IMAGE_2; -// public final String CONTAINER_2_NAME = "t01"; -// public final String CONTAINER_2_DATABASE = "tuw"; -// public final String CONTAINER_2_IP = "233.145.99.83"; -// public final Instant CONTAINER_2_CREATED = Instant.now().minus(1, HOURS); -// -// public final Container CONTAINER_1 = Container.builder() -// .containerId(CONTAINER_1_ID) -// .name(CONTAINER_1_NAME) -// .ipAddress(CONTAINER_1_IP) -// .image(CONTAINER_1_IMAGE) -// .containerId(CONTAINER_1_ID) -// .containerCreated(CONTAINER_1_CREATED) -// .build(); -// -// public final Container CONTAINER_2 = Container.builder() -// .containerId(CONTAINER_2_ID) -// .name(CONTAINER_2_NAME) -// .ipAddress(CONTAINER_2_IP) -// .image(CONTAINER_2_IMAGE) -// .containerId(CONTAINER_2_ID) -// .containerCreated(CONTAINER_2_CREATED) -// .build(); - -} diff --git a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/endpoint/EndpointTest.java b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/endpoint/EndpointTest.java deleted file mode 100644 index ccabe8d2bfc64a1a18591904457f1b8dbe10e869..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/endpoint/EndpointTest.java +++ /dev/null @@ -1,105 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseIntegrationTest; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.ImageRepository; -import at.tuwien.service.ContainerService; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class EndpointTest extends BaseIntegrationTest { - - @MockBean - private ImageRepository imageRepository; - - @MockBean - private ContainerRepository containerRepository; - - @MockBean - private ContainerService containerService; - -// @Test -// public void listAllDatabases_succeeds() { -// when(containerService.getAll()) -// .thenReturn(List.of(CONTAINER_1, CONTAINER_2)); -// -// final List<DatabaseContainer> response = containerService.getAll(); -// -// assertEquals(2, response.size()); -// assertEquals(CONTAINER_1_ID, response.get(0).getContainerId()); -// assertEquals(CONTAINER_1_DATABASE, response.get(0).getDatabaseName()); -// assertEquals(CONTAINER_1_NAME, response.get(0).getName()); -// assertEquals(CONTAINER_1_IP, response.get(0).getIpAddress()); -// assertEquals(CONTAINER_2_ID, response.get(1).getContainerId()); -// assertEquals(CONTAINER_2_DATABASE, response.get(1).getDatabaseName()); -// assertEquals(CONTAINER_2_NAME, response.get(1).getName()); -// assertEquals(CONTAINER_2_IP, response.get(1).getIpAddress()); -// } -// -// @Test -// public void create_succeeds() throws ImageNotFoundException { -// final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() -// .containerName(CONTAINER_1_NAME) -// .image(CONTAINER_1_IMAGE.dockerImageName()) -// .databaseName(CONTAINER_1_DATABASE) -// .build(); -// when(containerService.create(request)) -// .thenReturn(CONTAINER_1); -// -// final DatabaseContainer response = containerService.create(request); -// -// assertNotNull(response); -// assertEquals(response, CONTAINER_1); -// assertEquals(response.getImage(), CONTAINER_1_IMAGE); -// } -// -// @Test -// public void create_fails() throws ImageNotFoundException { -// final DatabaseContainerCreateRequestDto request = DatabaseContainerCreateRequestDto.builder() -// .containerName(CONTAINER_1_NAME) -// .image(CONTAINER_1_IMAGE.dockerImageName()) -// .databaseName(CONTAINER_1_DATABASE) -// .build(); -// when(containerService.create(request)) -// .thenReturn(CONTAINER_1); -// when(imageRepository.findByImage(IMAGE_1_REPOSITORY, IMAGE_1_TAG)) -// .thenReturn(null); -// } -// -// @Test -// public void findById_succeeds() { -// // -// } -// -// @Test -// public void findById_fails() { -// // -// } -// -// @Test -// public void change_succeeds() { -// // -// } -// -// @Test -// public void change_fails() { -// // -// } -// -// @Test -// public void delete_succeeds() { -// // -// } -// -// @Test -// public void delete_fails() { -// // -// } -} diff --git a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/mapper/BaseMappingTest.java b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/mapper/BaseMappingTest.java deleted file mode 100644 index 3bcb0922a4c230f4354c80156477dbf223bb22d7..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/mapper/BaseMappingTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package at.tuwien.mapper; - -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.model.ContainerNetwork; -import com.github.dockerjava.api.model.NetworkSettings; -import lombok.SneakyThrows; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -import java.lang.reflect.Field; -import java.util.Map; - -public abstract class BaseMappingTest { - - @Configuration - @ComponentScan(basePackages = {"at.tuwien"}) - public static class BaseMappingContext { - } - - final String CONTAINER_ID = "deadbeef"; - final String CONTAINER_NETWORK_IP = "154.234.88.15"; - - @SneakyThrows - final InspectContainerResponse mockInspectResponse() { - final InspectContainerResponse responseC = new InspectContainerResponse(); - final Object response = responseC.getClass().getConstructor().newInstance(); - final Field idField = responseC.getClass().getDeclaredField("id"); - idField.setAccessible(true); - idField.set(response, CONTAINER_ID); - final Field networkSettingsField = responseC.getClass().getDeclaredField("networkSettings"); - networkSettingsField.setAccessible(true); - - // define the network and address - final ContainerNetwork networkC = new ContainerNetwork(); - final Object network = networkC.getClass().getConstructor().newInstance(); - final Field ipField = networkC.getClass().getDeclaredField("ipAddress"); - ipField.setAccessible(true); - ipField.set(network, CONTAINER_NETWORK_IP); - final Map<String, ContainerNetwork> map = Map.of("bridge", (ContainerNetwork) network); - - // add to network settings - final NetworkSettings settingsC = new NetworkSettings(); - final Object settings = settingsC.getClass().getConstructor().newInstance(); - final Field networksField = settingsC.getClass().getDeclaredField("networks"); - networksField.setAccessible(true); - networksField.set(settings, map); - networkSettingsField.set(response, settings); - - return (InspectContainerResponse) response; - } - -} diff --git a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseContainerMappingTest.java b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseContainerMappingTest.java deleted file mode 100644 index f5759ed1b912eb60957b06d1826e58609cc54423..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseContainerMappingTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.tuwien.mapper; - -import com.github.dockerjava.api.command.InspectContainerResponse; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; - - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -@ExtendWith(SpringExtension.class) -@SpringBootTest -public class DatabaseContainerMappingTest extends BaseMappingTest { - -// @Test -// public void inspectContainerResponseToDatabaseContainerMappingTest_succeeds() { -// final InspectContainerResponse response = mockInspectResponse(); -// -// assertNotNull(response, "response must not be null"); -// assertEquals(CONTAINER_ID, response.getId()); -// assertNotNull(response.getNetworkSettings(), "networkSettings must not be null"); -// assertNotNull(response.getNetworkSettings().getNetworks(), "networkSettings.networks must not be null"); -// assertNotNull(response.getNetworkSettings().getNetworks().get("bridge"), "networkSettings.networks['bridge'] must not be null"); -// assertNotNull(response.getNetworkSettings().getNetworks().get("bridge").getIpAddress(), "networkSettings.networks['bridge'].ipAddress must not be null"); -// assertEquals(CONTAINER_NETWORK_IP, response.getNetworkSettings().getNetworks().get("bridge").getIpAddress()); -// } - -} diff --git a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/service/DockerIntegrationTest.java b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/service/DockerIntegrationTest.java deleted file mode 100644 index 18cd782a9adc0f6ab58ee7c0a330befa3b78e9ac..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/service/DockerIntegrationTest.java +++ /dev/null @@ -1,69 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseIntegrationTest; -import at.tuwien.api.dto.container.ContainerCreateRequestDto; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.ImageRepository; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import static org.mockito.Mockito.when; - -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class DockerIntegrationTest extends BaseIntegrationTest { - - @MockBean - private ContainerRepository containerRepository; - - @MockBean - private ImageRepository imageRepository; - - @MockBean - private ContainerService containerService; - -// @Test -// public void create_noImage_fails() { -// final ContainerCreateRequestDto containerDto = ContainerCreateRequestDto.builder().build(); -// -// Assertions.assertThrows(ImageNotFoundException.class, () -> containerService.create(containerDto)); -// } -// -// @Test -// public void create_imageNotFound_fails() { -// final ContainerCreateRequestDto containerDto = ContainerCreateRequestDto.builder().build(); -// containerDto.setImage("postgres:latest"); -// -// Assertions.assertThrows(ImageNotFoundException.class, () -> containerService.create(containerDto)); -// } -// -// @Test -// public void stop_notFound_fails() { -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(null); -// -// Assertions.assertThrows(ContainerNotFoundException.class, () -> containerService.stop(CONTAINER_1_ID)); -// } -// -// @Test -// public void remove_notFound_fails() { -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(null); -// -// Assertions.assertThrows(ContainerNotFoundException.class, () -> containerService.remove(CONTAINER_1_ID)); -// } -// -// @Test -// public void start_notFound_fails() { -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(null); -// -// Assertions.assertThrows(ContainerNotFoundException.class, () -> containerService.start(CONTAINER_1_ID)); -// } -} diff --git a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/service/ServiceTest.java b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/service/ServiceTest.java deleted file mode 100644 index cf50d4d39ff79c03e5c71a674693d8d96be1cce4..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/service/ServiceTest.java +++ /dev/null @@ -1,159 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseIntegrationTest; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.ImageRepository; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import static org.mockito.Mockito.mock; - -@ExtendWith(SpringExtension.class) -@SpringBootTest -public class ServiceTest extends BaseIntegrationTest { - - @MockBean - private ContainerRepository containerRepository; - - @MockBean - private ImageRepository imageRepository; - - @Autowired - private ContainerService containerService; - -// @Test -// public void getAllTest_succeeds() { -// when(containerRepository.findAll()) -// .thenReturn(List.of(CONTAINER_1, CONTAINER_2)); -// -// final List<DatabaseContainer> response = containerService.getAll(); -// Assertions.assertEquals(2, response.size()); -// Assertions.assertEquals(CONTAINER_1, response.get(0)); -// Assertions.assertEquals(CONTAINER_2, response.get(1)); -// } -// -// @Test -// public void getById_succeeds() throws ContainerNotFoundException { -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(CONTAINER_1); -// -// final DatabaseContainer response = containerService.getById(CONTAINER_1_ID); -// Assertions.assertEquals(CONTAINER_1, response); -// } -// -// @Test -// public void getById_fails() { -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(null); -// -// Assertions.assertThrows(ContainerNotFoundException.class, () -> containerService.getById(CONTAINER_1_ID)); -// } -// -// @Test -// public void create_noImage_fails() { -// final ContainerCreateRequestDto containerDto = ContainerCreateRequestDto.builder().build(); -// -// Assertions.assertThrows(ImageNotFoundException.class, () -> containerService.create(containerDto)); -// } -// -// @Test -// public void create_imageNotFound_fails() { -// final ContainerCreateRequestDto containerDto = ContainerCreateRequestDto.builder().build(); -// containerDto.setImage("postgres:latest"); -// -// Assertions.assertThrows(ImageNotFoundException.class, () -> containerService.create(containerDto)); -// } -// -// @Test -// public void stop_dockerClient_fails() { -// final DockerClient dockerClient = mock(DockerClient.class); -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(CONTAINER_1); -// when(dockerClient.stopContainerCmd(CONTAINER_1_ID)) -// .thenThrow(NotFoundException.class); -// -// Assertions.assertThrows(DockerClientException.class, () -> containerService.stop(CONTAINER_1_ID)); -// } -// -// @Test -// public void stop_notFound_fails() { -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(null); -// -// Assertions.assertThrows(ContainerNotFoundException.class, () -> containerService.stop(CONTAINER_1_ID)); -// } -// -// @Test -// public void stop_dockerClient2_fails() { -// final DockerClient dockerClient = mock(DockerClient.class); -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(CONTAINER_1); -// when(dockerClient.stopContainerCmd(CONTAINER_1_ID)) -// .thenThrow(NotModifiedException.class); -// -// Assertions.assertThrows(DockerClientException.class, () -> containerService.stop(CONTAINER_1_ID)); -// } -// -// @Test -// public void remove_notFound_fails() { -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(null); -// -// Assertions.assertThrows(ContainerNotFoundException.class, () -> containerService.remove(CONTAINER_1_ID)); -// } -// -// @Test -// public void remove_dockerClient_fails() { -// final DockerClient dockerClient = mock(DockerClient.class); -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(CONTAINER_1); -// when(dockerClient.removeContainerCmd(CONTAINER_1_ID)) -// .thenThrow(NotFoundException.class); -// -// Assertions.assertThrows(DockerClientException.class, () -> containerService.remove(CONTAINER_1_ID)); -// } -// -// @Test -// public void remove_dockerClient2_fails() { -// final DockerClient dockerClient = mock(DockerClient.class); -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(CONTAINER_1); -// when(dockerClient.removeContainerCmd(CONTAINER_1_ID)) -// .thenThrow(NotModifiedException.class); -// -// Assertions.assertThrows(DockerClientException.class, () -> containerService.remove(CONTAINER_1_ID)); -// } -// -// @Test -// public void start_notFound_fails() { -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(null); -// -// Assertions.assertThrows(ContainerNotFoundException.class, () -> containerService.start(CONTAINER_1_ID)); -// } -// -// @Test -// public void start_dockerClient_fails() { -// final DockerClient dockerClient = mock(DockerClient.class); -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(CONTAINER_1); -// when(dockerClient.removeContainerCmd(CONTAINER_1_ID)) -// .thenThrow(NotFoundException.class); -// -// Assertions.assertThrows(DockerClientException.class, () -> containerService.start(CONTAINER_1_ID)); -// } -// -// @Test -// public void start_dockerClient2_fails() { -// final DockerClient dockerClient = mock(DockerClient.class); -// when(containerRepository.findByContainerId(CONTAINER_1_ID)) -// .thenReturn(CONTAINER_1); -// when(dockerClient.removeContainerCmd(CONTAINER_1_ID)) -// .thenThrow(NotModifiedException.class); -// -// Assertions.assertThrows(DockerClientException.class, () -> containerService.start(CONTAINER_1_ID)); -// } -} diff --git a/fda-container-managing-service/rest-service/src/test/resources/application.properties b/fda-container-managing-service/rest-service/src/test/resources/application.properties deleted file mode 100644 index 1ac2d698d2b15e6fc7e890f038d98e0231941392..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/rest-service/src/test/resources/application.properties +++ /dev/null @@ -1,6 +0,0 @@ -# disable discovery -spring.cloud.discovery.enabled = false - -# disable cloud config and config discovery -spring.cloud.config.discovery.enabled = false -spring.cloud.config.enabled = false \ No newline at end of file diff --git a/fda-container-managing-service/services/pom.xml b/fda-container-managing-service/services/pom.xml index 0aea0178119d998dc62ffa8dfd854df1b21b2037..30520bc272f74e25c2dc0cc015ce633133a127d0 100644 --- a/fda-container-managing-service/services/pom.xml +++ b/fda-container-managing-service/services/pom.xml @@ -2,54 +2,27 @@ <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-container-managing-service</artifactId> <groupId>at.tuwien</groupId> <version>0.0.1-SNAPSHOT</version> </parent> + <modelVersion>4.0.0</modelVersion> <artifactId>services</artifactId> - <version>0.0.1-SNAPSHOT</version> - <name>fda-container-managing-service-services</name> - - <properties> - <maven.compiler.source>11</maven.compiler.source> - <maven.compiler.target>11</maven.compiler.target> - </properties> <dependencies> <dependency> <groupId>at.tuwien</groupId> <artifactId>api</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>${project.version}</version> </dependency> - </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <source>${java.version}</source> - <target>${java.version}</target> - <annotationProcessorPaths> - <path> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <version>${lombok.version}</version> - </path> - <!-- keep this order https://stackoverflow.com/questions/47676369/mapstruct-and-lombok-not-working-together#answer-65021876 --> - <path> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> + <dependency> + <groupId>com.github.docker-java</groupId> + <artifactId>docker-java</artifactId> + <version>3.2.1</version> + </dependency> + </dependencies> </project> \ No newline at end of file diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/config/ContainerSpringConfig.java b/fda-container-managing-service/services/src/main/java/at/tuwien/config/ContainerSpringConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..80f8a4905dc16e6beabfaa54340f964990330cda --- /dev/null +++ b/fda-container-managing-service/services/src/main/java/at/tuwien/config/ContainerSpringConfig.java @@ -0,0 +1,23 @@ +package at.tuwien.config; + +import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.core.DefaultDockerClientConfig; +import com.github.dockerjava.core.DockerClientBuilder; +import org.apache.commons.lang.SystemUtils; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class ContainerSpringConfig { + + private final String localDockerHost = SystemUtils.IS_OS_WINDOWS ? "tcp://localhost:2375" + : "unix:///var/run/docker.sock"; + + private final DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder() + .withDockerHost(localDockerHost).build(); + + @Bean + public DockerClient dockerClientConfiguration(){ + return DockerClientBuilder.getInstance(config).build(); + } +} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/config/DockerConfig.java b/fda-container-managing-service/services/src/main/java/at/tuwien/config/DockerConfig.java deleted file mode 100644 index e06cdb90adac645a90aa42b018704129ea8b34ec..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/config/DockerConfig.java +++ /dev/null @@ -1,29 +0,0 @@ -package at.tuwien.config; - -import com.github.dockerjava.api.DockerClient; -import com.github.dockerjava.api.model.HostConfig; -import com.github.dockerjava.api.model.RestartPolicy; -import com.github.dockerjava.core.DefaultDockerClientConfig; -import com.github.dockerjava.core.DockerClientBuilder; -import com.github.dockerjava.core.DockerClientConfig; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class DockerConfig { - - @Bean - public HostConfig hostConfig() { - return HostConfig.newHostConfig() - .withRestartPolicy(RestartPolicy.alwaysRestart()); - } - - @Bean - public DockerClient dockerClientConfiguration() { - final DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder() - .withDockerHost("unix:///var/run/docker.sock") - .build(); - return DockerClientBuilder.getInstance(config) - .build(); - } -} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Architecture.java b/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Architecture.java deleted file mode 100644 index 234008b07484f09549998ca1e3838f3ad478063f..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Architecture.java +++ /dev/null @@ -1,5 +0,0 @@ -package at.tuwien.entity; - -public enum Architecture { - LINUX_AMD64, LINUX_ARM64, LINUX_RISCV64, LINUX_PPC64LE, LINUX_S390X, LINUX_386, LINUX_ARM_V7, LINUX_ARM_V8 -} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Auditable.java b/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Auditable.java deleted file mode 100644 index db1840b0f3d6ab45f941907f6c0610ce506757f4..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Auditable.java +++ /dev/null @@ -1,37 +0,0 @@ -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-container-managing-service/services/src/main/java/at/tuwien/entity/Container.java b/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Container.java deleted file mode 100644 index 18c5481a7b004cd0fbdfd042867720952aedd5cf..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Container.java +++ /dev/null @@ -1,38 +0,0 @@ -package at.tuwien.entity; - -import lombok.*; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.OneToOne; -import javax.persistence.Transient; -import java.time.Instant; - -@Entity -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true) -@ToString(callSuper = true, onlyExplicitlyIncluded = true) -public class Container extends Auditable { - - @Column(nullable = false) - private String containerId; - - @Column(nullable = false) - private Instant containerCreated; - - @Column(nullable = false) - private String name; - - @OneToOne(optional = false) - private ContainerImage image; - - @Transient - private String status; - - @Column - private String ipAddress; - -} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/entity/ContainerImage.java b/fda-container-managing-service/services/src/main/java/at/tuwien/entity/ContainerImage.java deleted file mode 100644 index 5e9837d1df4d1360fe25ba33969b8be5a89a733a..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/entity/ContainerImage.java +++ /dev/null @@ -1,53 +0,0 @@ -package at.tuwien.entity; - -import lombok.*; -import org.hibernate.annotations.Immutable; - -import javax.persistence.Column; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import java.math.BigInteger; -import java.time.Instant; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -@Entity -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true) -@ToString(callSuper = true, onlyExplicitlyIncluded = true) -public class ContainerImage extends Auditable { - - @Column(nullable = false) - private String repository; - - @Column(nullable = false) - private String tag; - - @Column(nullable = false) - private String hash; - - @Column(nullable = false) - private Instant built; - - @Column(nullable = false) - private BigInteger size; - - @Column(nullable = false) - private Integer defaultPort; - - @ElementCollection - @Immutable - private Collection<String> environment; - - @Column(nullable = false) - private Architecture architecture; - - public final String dockerImageName() { - return repository + ":" + tag; - } - -} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java b/fda-container-managing-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java deleted file mode 100644 index a15fcfb8a9ebd2790036be9c1df295176d339ee3..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class ContainerNotFoundException extends Exception { - - public ContainerNotFoundException(String message) { - super(message); - } - - public ContainerNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public ContainerNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/exception/DockerClientException.java b/fda-container-managing-service/services/src/main/java/at/tuwien/exception/DockerClientException.java deleted file mode 100644 index b5a812c74452e91b2b361b5bcb8fa2c21113fb13..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/exception/DockerClientException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.BAD_REQUEST) -public class DockerClientException extends Exception { - - public DockerClientException(String message) { - super(message); - } - - public DockerClientException(String message, Throwable thr) { - super(message, thr); - } - - public DockerClientException(Throwable thr) { - super(thr); - } - -} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/exception/ImageNotFoundException.java b/fda-container-managing-service/services/src/main/java/at/tuwien/exception/ImageNotFoundException.java deleted file mode 100644 index f1d08f84c6d9d31c83e46d175a30e7fd33ee2f58..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/exception/ImageNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class ImageNotFoundException extends Exception { - - public ImageNotFoundException(String message) { - super(message); - } - - public ImageNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public ImageNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java b/fda-container-managing-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java deleted file mode 100644 index e8d781ed2c38e88a9d9f4d2ff856b0850311c30a..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java +++ /dev/null @@ -1,43 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.dto.container.ContainerBriefDto; -import at.tuwien.api.dto.IpAddressDto; -import at.tuwien.api.dto.container.ContainerDto; -import at.tuwien.entity.Container; -import at.tuwien.entity.ContainerImage; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.model.NetworkSettings; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; - -@Mapper(componentModel = "spring") -public interface ContainerMapper { - - @Mappings({ - @Mapping(source = "id", target = "containerId"), - @Mapping(source = "created", target = "containerCreated"), - }) - Container inspectContainerResponseToContainer(InspectContainerResponse containerResponse); - - default String networkSettingsNetworksBridgeToIpAddress(NetworkSettings data) { - return data.getNetworks().get("bridge").getIpAddress(); - } - - default ContainerImage imageToContainerImage(String image) { - int index = image.indexOf(":"); - return new ContainerImage().builder() - .repository(image.substring(0, index)) - .tag(image.substring(index + 1)) - .build(); - } - - Container containerToContainer(com.github.dockerjava.api.model.Container data); - - ContainerDto containerToContainerDto(Container data); - - ContainerBriefDto containerToDatabaseContainerBriefDto(Container data); - - IpAddressDto ipAddressToIpAddressDto(String data); - -} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/mapper/ContainerToDatabaseContainerMapper.java b/fda-container-managing-service/services/src/main/java/at/tuwien/mapper/ContainerToDatabaseContainerMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..ad1e929f2e2b26dbb55075cc836760bcbc9c2ea3 --- /dev/null +++ b/fda-container-managing-service/services/src/main/java/at/tuwien/mapper/ContainerToDatabaseContainerMapper.java @@ -0,0 +1,26 @@ +package at.tuwien.mapper; + +import at.tuwien.model.DatabaseContainer; +import com.github.dockerjava.api.command.InspectContainerResponse; +import org.apache.commons.lang.StringUtils; + +import java.util.Arrays; + + +public class ContainerToDatabaseContainerMapper { + + + public DatabaseContainer map(InspectContainerResponse containerResponse) { + DatabaseContainer databaseContainer = new DatabaseContainer(); + String ipAddress = containerResponse.getNetworkSettings().getNetworks().get("bridge").getIpAddress(); + String dbName = Arrays.stream(containerResponse.getConfig().getEnv()).filter(s -> s.startsWith("POSTGRES_DB=")).findFirst().get(); + dbName = StringUtils.remove(dbName, "POSTGRES_DB="); + databaseContainer.setContainerID(containerResponse.getId()); + databaseContainer.setContainerName(containerResponse.getName()); + databaseContainer.setCreated(containerResponse.getCreated()); + databaseContainer.setIpAddress(ipAddress); + databaseContainer.setDbName(dbName); + databaseContainer.setStatus(containerResponse.getState().getStatus()); + return databaseContainer; + } +} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/model/DatabaseContainer.java b/fda-container-managing-service/services/src/main/java/at/tuwien/model/DatabaseContainer.java new file mode 100644 index 0000000000000000000000000000000000000000..1e38780332cecfaccb7410941e7887ec97df8e16 --- /dev/null +++ b/fda-container-managing-service/services/src/main/java/at/tuwien/model/DatabaseContainer.java @@ -0,0 +1,28 @@ +package at.tuwien.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.Map; + +@NoArgsConstructor +@Getter +@Setter +public class DatabaseContainer { + + @JsonProperty("ContainerID") + private String containerID; + @JsonProperty("Created") + private String created; + @JsonProperty("ContainerName") + private String containerName; + @JsonProperty("DbName") + private String dbName; + @JsonProperty("Status") + private String status; + @JsonProperty("IpAddress") + private String ipAddress; + +} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/repository/ContainerRepository.java b/fda-container-managing-service/services/src/main/java/at/tuwien/repository/ContainerRepository.java deleted file mode 100644 index 777f12efe2afdd7c6f29f369890cf24de22f1542..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/repository/ContainerRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package at.tuwien.repository; - -import at.tuwien.entity.Container; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ContainerRepository extends JpaRepository<Container, Long> { - - Container findByContainerId(String id); - -} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/repository/ImageRepository.java b/fda-container-managing-service/services/src/main/java/at/tuwien/repository/ImageRepository.java deleted file mode 100644 index 1a8991617df6a93da4bcdb5fc59d5c89014663ca..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/repository/ImageRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.repository; - -import at.tuwien.entity.ContainerImage; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; - -@Repository -public interface ImageRepository extends JpaRepository<ContainerImage, Long> { - - @Query(value = "select distinct tag from ContainerImage where repository = :repo and tag = :tag") - ContainerImage findByImage(@Param("repo") String repository, @Param("tag") String tag); - -} diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/service/ContainerService.java b/fda-container-managing-service/services/src/main/java/at/tuwien/service/ContainerService.java index 0bd7d55ccf0dcb0d6479f5ce638fa19db4becbed..0a075ca5fa730b4c32cb7eb832eacc2b16504da1 100644 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/service/ContainerService.java +++ b/fda-container-managing-service/services/src/main/java/at/tuwien/service/ContainerService.java @@ -1,127 +1,64 @@ package at.tuwien.service; -import at.tuwien.api.dto.container.ContainerCreateRequestDto; -import at.tuwien.entity.Container; -import at.tuwien.entity.ContainerImage; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.exception.DockerClientException; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.mapper.ContainerMapper; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.ImageRepository; +import at.tuwien.dto.CreateDatabaseContainerDTO; +import at.tuwien.mapper.ContainerToDatabaseContainerMapper; +import at.tuwien.model.DatabaseContainer; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.exception.NotModifiedException; -import com.github.dockerjava.api.model.HostConfig; -import com.github.dockerjava.api.model.PortBinding; -import lombok.extern.log4j.Log4j2; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.model.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.SocketUtils; -import java.time.Instant; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; -@Log4j2 @Service public class ContainerService { - private final HostConfig hostConfig; - private final DockerClient dockerClient; - private final ImageRepository imageRepository; - private final ContainerRepository containerRepository; - private final ContainerMapper databaseContainerMapper; + private DockerClient dockerClient; @Autowired - public ContainerService(DockerClient dockerClient, ContainerRepository containerRepository, - ImageRepository imageRepository, HostConfig hostConfig, ContainerMapper databaseContainerMapper) { - this.hostConfig = hostConfig; + public ContainerService(DockerClient dockerClient) { this.dockerClient = dockerClient; - this.imageRepository = imageRepository; - this.containerRepository = containerRepository; - this.databaseContainerMapper = databaseContainerMapper; } - public Container create(ContainerCreateRequestDto containerDto) throws ImageNotFoundException { - final int index = containerDto.getImage().indexOf(":"); - final String repositoryName = containerDto.getImage().substring(0, index); - final String tagName = containerDto.getImage().substring(index + 1); - final ContainerImage containerImage = imageRepository.findByImage(repositoryName, tagName); - if (containerImage == null) { - throw new ImageNotFoundException("image was not found in metadata database."); - } - final Integer availableTcpPort = SocketUtils.findAvailableTcpPort(10000); - final HostConfig hostConfig = this.hostConfig - .withPortBindings(PortBinding.parse(availableTcpPort + ":" + containerImage.getDefaultPort())); - final List<String> environment = new ArrayList<>(containerImage.getEnvironment()); - final CreateContainerResponse response = dockerClient.createContainerCmd(containerDto.getImage()) - .withName(containerDto.getContainerName()) - .withEnv(environment) - .withHostConfig(hostConfig) - .exec(); - return Container.builder() - .containerCreated(Instant.now()) - .image(containerImage) - .name(containerDto.getContainerName()) - .containerId(response.getId()) - .build(); - } + public String createDatabaseContainer(CreateDatabaseContainerDTO dto) { + int availableTcpPort = SocketUtils.findAvailableTcpPort(8180, 8500); + HostConfig hostConfig = HostConfig.newHostConfig() + .withPortBindings(PortBinding.parse(availableTcpPort + ":5432")) + .withRestartPolicy(RestartPolicy.alwaysRestart()); - public Container stop(String containerId) throws ContainerNotFoundException, DockerClientException { - final Container container = containerRepository.findByContainerId(containerId); - if (container == null) { - throw new ContainerNotFoundException("no container with this id in metadata database"); - } - try { - dockerClient.stopContainerCmd(container.getContainerId()).exec(); - } catch (NotFoundException | NotModifiedException e) { - throw new DockerClientException("docker client failed", e); - } - log.debug("Stopped container {}", containerId); - return container; - } + CreateContainerResponse container = dockerClient.createContainerCmd("rdr-postgres:1.0") + .withName(dto.getContainerName()) + .withEnv("POSTGRES_DB=" + dto.getDbName(), "POSTGRES_PASSWORD=postgres") + .withHostConfig(hostConfig).exec(); - public void remove(String containerId) throws ContainerNotFoundException, DockerClientException { - final Container container = containerRepository.findByContainerId(containerId); - if (container == null) { - throw new ContainerNotFoundException("no container with this id in metadata database"); - } - try { - dockerClient.removeContainerCmd(containerId).exec(); - } catch (NotFoundException | NotModifiedException e) { - throw new DockerClientException("docker client failed", e); - } - log.debug("Removed container {}", containerId); - } + dockerClient.startContainerCmd(container.getId()).exec(); - public Container getById(String containerId) throws ContainerNotFoundException { - final Container container = containerRepository.findByContainerId(containerId); - if (container == null) { - throw new ContainerNotFoundException("no database with this container id in metadata database"); - } - return container; + return container.getId(); } - public List<Container> getAll() { - return containerRepository.findAll(); + public DatabaseContainer getDatabaseContainerByContainerID(String containerID) { + InspectContainerResponse container + = dockerClient.inspectContainerCmd(containerID).exec(); + + ContainerToDatabaseContainerMapper mapper = new ContainerToDatabaseContainerMapper(); + return mapper.map(container); } - /** - * Starts a database container by given container ID - * - * @param containerId The container ID - * @return The container - */ - public Container start(String containerId) throws ContainerNotFoundException, DockerClientException { - final Container container = getById(containerId); - try { - dockerClient.startContainerCmd(container.getContainerId()).exec(); - } catch (NotFoundException | NotModifiedException e) { - throw new DockerClientException("docker client failed", e); - } - return container; + public List<DatabaseContainer> findAllDatabaseContainers() { + List<Container> containers = dockerClient.listContainersCmd().withShowAll(true).withAncestorFilter(Arrays.asList("rdr-postgres:1.0")).exec(); + List<DatabaseContainer> databaseContainers = new ArrayList<>(); + containers.forEach(container -> { + DatabaseContainer databaseContainerByContainerByID = getDatabaseContainerByContainerID(container.getId()); + databaseContainers.add(databaseContainerByContainerByID); + }); + + return databaseContainers; } + } diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/service/ImageService.java b/fda-container-managing-service/services/src/main/java/at/tuwien/service/ImageService.java deleted file mode 100644 index 659f46fa912e3af792fae3a595eaba98cc47e6ee..0000000000000000000000000000000000000000 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/service/ImageService.java +++ /dev/null @@ -1,24 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entity.ContainerImage; -import at.tuwien.repository.ImageRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class ImageService { - - private final ImageRepository imageRepository; - - @Autowired - public ImageService(ImageRepository imageRepository) { - this.imageRepository = imageRepository; - } - - public List<ContainerImage> getAll() { - return imageRepository.findAll(); - } - -} diff --git a/fda-database-managing-service/Dockerfile b/fda-database-managing-service/Dockerfile index 06f0bb00f7d8fa12b46e2dd15c1580fd4af44ad2..ab1af5623eac67e420c47d291ef9fa1125dfec96 100644 --- a/fda-database-managing-service/Dockerfile +++ b/fda-database-managing-service/Dockerfile @@ -11,13 +11,13 @@ COPY ./gateways ./gateways COPY ./rest-service ./rest-service COPY ./services ./services -RUN mvn -q clean package -DskipTests +RUN mvn -q clean package > /dev/null ###### SECOND STAGE ###### FROM openjdk:11-jre-slim as runtime -COPY --from=build ./rest-service/target/rest-service-*.jar ./rest-service.jar +COPY --from=build ./rest-service/target/fda-database-managing-service-*.jar ./rest.jar EXPOSE 9092 -ENTRYPOINT ["java", "-jar", "./rest-service.jar"] +ENTRYPOINT ["java", "-jar", "./rest.jar"] diff --git a/fda-database-managing-service/api/pom.xml b/fda-database-managing-service/api/pom.xml index e3fbd72fce25ad0c1821f7079289927105b0a142..5d207b42386af8ddc6828eb4b938ad6386c295ed 100644 --- a/fda-database-managing-service/api/pom.xml +++ b/fda-database-managing-service/api/pom.xml @@ -2,23 +2,14 @@ <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-database-managing-service</artifactId> <groupId>at.tuwien</groupId> <version>0.0.1-SNAPSHOT</version> </parent> + <modelVersion>4.0.0</modelVersion> <artifactId>api</artifactId> - <version>0.0.1-SNAPSHOT</version> - <name>fda-database-managing-service-api</name> - - <properties> - <maven.compiler.source>11</maven.compiler.source> - <maven.compiler.target>11</maven.compiler.target> - </properties> - - <dependencies/> </project> \ No newline at end of file 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 new file mode 100644 index 0000000000000000000000000000000000000000..cb6f870caf22d167322fb4834a7bfa2e9860fbd5 --- /dev/null +++ b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/CreateDatabaseDTO.java @@ -0,0 +1,18 @@ +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 deleted file mode 100644 index 64e92d3347110d63227f4965e04f3cc37bf4e8c0..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseBriefDto.java +++ /dev/null @@ -1,17 +0,0 @@ -package at.tuwien.dto.database; - -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - -@Getter -@Setter -public class DatabaseBriefDto { - - @NotNull - @Size(min = 64, max = 64) - 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 deleted file mode 100644 index d1d6f8d98c9f6cf19b63002618048c48d5bc5f61..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseChangeDto.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.dto.database; - -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotNull; - -@Getter -@Setter -public class DatabaseChangeDto { - - @NotNull - 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 deleted file mode 100644 index d171bc9173543fc73b948c895648fe5b6b55ddc8..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseCreateDto.java +++ /dev/null @@ -1,59 +0,0 @@ -package at.tuwien.dto.database; - -import at.tuwien.dto.table.TableDto; -import io.swagger.v3.oas.annotations.Parameter; -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; -import java.time.Instant; - -@Getter -@Setter -public class DatabaseCreateDto { - - @NotBlank - @Parameter(name = "container id", description = "container hash") - private String containerId; - - @NotBlank - @Size(min = 3) - @Parameter(name = "database name") - private String name; - - @NotBlank - @Parameter(name = "database engine", example = "postgres") - private String engine; - - @NotBlank - @Size(min = 3) - @Parameter(name = "database owner") - private String owner; - - @NotBlank - @Size(min = 3) - @Parameter(name = "database creator name") - private String creator; - - @NotBlank - @Size(min = 3) - @Parameter(name = "database publisher name") - private String publisher; - - @NotBlank - @Parameter(name = "database publication year", example = "2021") - private Instant publicationYear; - - @NotBlank - @Parameter(name = "database resource type") - private String ResourceType; - - @Parameter(name = "database description") - private String description; - - @NotBlank - @Parameter(name = "database table definition scheme") - private TableDto[] tables; - -} 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 deleted file mode 100644 index 3462755d1d8fba7188cc78cced388e06d01c6c82..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/database/DatabaseDto.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.dto.database; - -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; - -@Getter -@Setter -public class DatabaseDto extends DatabaseBriefDto { - - @NotBlank - @Size(min = 3) - private String name; - - @NotBlank - @Size(min = 64, max = 64) - 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 deleted file mode 100644 index a8fde192c74009a677ec5e4b3bc67d3d9261042e..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableBriefDto.java +++ /dev/null @@ -1,12 +0,0 @@ -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 deleted file mode 100644 index 6ffa365a098a8ab99f3e28001e0145adf517a946..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableCreateDto.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.dto.table; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class TableCreateDto extends TableDto { - -} 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 deleted file mode 100644 index db8888ac926252a65e9cefb56107e3088012a60a..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/TableDto.java +++ /dev/null @@ -1,34 +0,0 @@ -package at.tuwien.dto.table; - -import at.tuwien.dto.table.columns.ColumnDto; -import at.tuwien.dto.table.columns.RowDto; -import io.swagger.annotations.ApiParam; -import io.swagger.v3.oas.annotations.Parameter; -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; - -@Getter -@Setter -public class TableDto extends TableBriefDto { - - @NotBlank - @Size(min = 3) - @Parameter(name = "table name", required = true) - private String name; - - @NotBlank - @Parameter(name = "table description", required = true) - private String description; - - @NotBlank - @Parameter(name = "table columns", required = true) - private ColumnDto[] columns; - - @NotBlank - @Parameter(name = "table rows", required = true, description = "must have the same length of columns") - private RowDto[] rows; - -} diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/ColumnDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/ColumnDto.java deleted file mode 100644 index c189b637c3a835c8b4db667c45f055ebfef4c545..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/ColumnDto.java +++ /dev/null @@ -1,44 +0,0 @@ -package at.tuwien.dto.table.columns; - -import io.swagger.v3.oas.annotations.Parameter; -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotBlank; - -@Getter -@Setter -public class ColumnDto { - - @NotBlank - @Parameter(name = "column type") - private ColumnTypeDto type; - - @Parameter(name = "categories", description = "only categorical, derive totalCategories from array") - private String[] categories; - - @Parameter(name = "categories", description = "only nominal and numerical") - private Double maxLength; - - @Parameter(name = "categories", description = "only numerical") - private SiUnitDto siUnit; - - @Parameter(name = "categories", description = "only numerical") - private Double min; - - @Parameter(name = "categories", description = "only numerical") - private Double max; - - @Parameter(name = "categories", description = "only numerical") - private Double mean; - - @Parameter(name = "categories", description = "only numerical") - private Double median; - - @Parameter(name = "categories", description = "only numerical") - private Double standardDeviation; - - @Parameter(name = "categories", description = "only numerical") - private Object histogram; - -} diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/ColumnTypeDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/ColumnTypeDto.java deleted file mode 100644 index df586665a1d6700fab7b6564ee3ee4a4e8d41437..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/ColumnTypeDto.java +++ /dev/null @@ -1,5 +0,0 @@ -package at.tuwien.dto.table.columns; - -public enum ColumnTypeDto { - CATEGORICAL, NOMINAL, NUMERICAL -} diff --git a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/RowDto.java b/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/RowDto.java deleted file mode 100644 index ce8d58a2dd12df006300f581ae39aac728027b9d..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/RowDto.java +++ /dev/null @@ -1,18 +0,0 @@ -package at.tuwien.dto.table.columns; - -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotBlank; - -@Getter -@Setter -public class RowDto { - - @NotBlank - private ColumnDto[] columns; - - @NotBlank - private String[] data; - -} 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 deleted file mode 100644 index 8a776c6fff087577b7ece6ea004bc7295ab9da27..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/api/src/main/java/at/tuwien/dto/table/columns/SiUnitDto.java +++ /dev/null @@ -1,5 +0,0 @@ -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 a1424937763c41c5db1a320469b4be6c8ff4d7fc..e6c6c205ae2c971990c6129d44e11708d306c384 100644 --- a/fda-database-managing-service/gateways/pom.xml +++ b/fda-database-managing-service/gateways/pom.xml @@ -2,29 +2,30 @@ <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-database-managing-service</artifactId> <groupId>at.tuwien</groupId> <version>0.0.1-SNAPSHOT</version> </parent> + <modelVersion>4.0.0</modelVersion> <artifactId>gateways</artifactId> - <version>0.0.1-SNAPSHOT</version> - <name>fda-database-managing-service-gateways</name> - - <properties> - <maven.compiler.source>11</maven.compiler.source> - <maven.compiler.target>11</maven.compiler.target> - </properties> - <dependencies> <dependency> <groupId>at.tuwien</groupId> <artifactId>api</artifactId> - <version>0.0.1-SNAPSHOT</version> - <scope>compile</scope> + <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-webflux</artifactId> + </dependency> + <dependency> + <groupId>org.projectreactor</groupId> + <artifactId>reactor-spring</artifactId> + <version>1.0.1.RELEASE</version> + </dependency> + </dependencies> </project> \ No newline at end of file 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 d5e4051ac0ed71283a9dd47e9d97ddc4e715565e..5cee43ea242ebd5e86479c053ca0c37cc024ef08 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,16 +1,21 @@ package at.tuwien.clients; -import at.tuwien.dto.database.DatabaseCreateDto; +import at.tuwien.dto.CreateDatabaseDTO; import at.tuwien.model.Database; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.ClientResponse; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; +import javax.ws.rs.core.Response; +import java.util.Collections; import java.util.List; @Component @@ -20,14 +25,14 @@ public class FdaContainerManagingClient { @Autowired private WebClient.Builder webClientBuilder; - public boolean createDatabaseContainer(DatabaseCreateDto dto) { + public boolean createDatabaseContainer(CreateDatabaseDTO dto) { LOGGER.debug("request fda-container-managing service for createDatabaseContainer"); ClientResponse clientResponse = webClientBuilder .build() .post() - .uri("http://fda-container-managing/at.tuwien.api/createDatabaseContainer") + .uri("http://fda-container-managing/api/createDatabaseContainer") .contentType(MediaType.APPLICATION_JSON) - .body(Mono.just(dto), DatabaseCreateDto.class) + .body(Mono.just(dto), CreateDatabaseDTO.class) .exchange() .block(); @@ -43,7 +48,7 @@ public class FdaContainerManagingClient { List<Database> databases = webClientBuilder .build() .get() - .uri("http://fda-container-managing/at.tuwien.api/getCreatedDatabaseContainers") + .uri("http://fda-container-managing/api/getCreatedDatabaseContainers") .retrieve() .bodyToFlux(Database.class) .collectList() diff --git a/fda-database-managing-service/pom.xml b/fda-database-managing-service/pom.xml index 2e63b889d3f152786b469a8d7ba1aaeb93265c6e..bdc3e437a9bc7c7a3bb9a904cc668d155d357f1f 100644 --- a/fda-database-managing-service/pom.xml +++ b/fda-database-managing-service/pom.xml @@ -2,34 +2,28 @@ <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> + <packaging>pom</packaging> + <modules> + <module>rest-service</module> + <module>gateways</module> + <module>api</module> + <module>services</module> + </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>2.4.3</version> + <version>2.3.4.RELEASE</version> + <relativePath/> <!-- lookup parent from repository --> </parent> - <groupId>at.tuwien</groupId> <artifactId>fda-database-managing-service</artifactId> <version>0.0.1-SNAPSHOT</version> <name>fda-database-managing-service</name> <description>Demo project for Spring Boot</description> - <packaging>pom</packaging> - <modules> - <module>api</module> - <module>gateways</module> - <module>rest-service</module> - <module>services</module> - </modules> - <properties> <java.version>11</java.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version> - <mapstruct.version>1.4.2.Final</mapstruct.version> - <docker.version>3.2.7</docker.version> - <testcontainers.version>1.15.2</testcontainers.version> - <swagger.version>2.1.7</swagger.version> - <springfox.version>3.0.0</springfox.version> </properties> <dependencies> @@ -37,32 +31,16 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-webflux</artifactId> - </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> - <version>3.0.1</version> - <exclusions> - <exclusion> - <groupId>javax.ws.rs</groupId> - <artifactId>jsr311-api</artifactId> - </exclusion> - </exclusions> </dependency> + <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <!-- DataSource --> - <dependency> - <groupId>org.postgresql</groupId> - <artifactId>postgresql</artifactId> - <scope>runtime</scope> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> </dependency> - <!-- Testing --> + <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> @@ -74,80 +52,17 @@ </exclusion> </exclusions> </dependency> - <!-- DTO --> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-spring-web</artifactId> - <version>2.9.2</version> - </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- Docker --> - <dependency> - <groupId>com.github.docker-java</groupId> - <artifactId>docker-java</artifactId> - <version>${docker.version}</version> - <exclusions> - <exclusion> - <groupId>javax.ws.rs</groupId> - <artifactId>jsr311-api</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.github.docker-java</groupId> - <artifactId>docker-java-transport-httpclient5</artifactId> - <version>${docker.version}</version> - </dependency> - <!-- Mapping --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - <optional>true</optional><!-- IntelliJ --> - </dependency> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - <version>${mapstruct.version}</version> - </dependency> - <!-- Swagger --> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-boot-starter</artifactId> - <version>${springfox.version}</version> - </dependency> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-swagger-ui</artifactId> - <version>${springfox.version}</version> - </dependency> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-spring-web</artifactId> - <version>${springfox.version}</version> - </dependency> - <dependency> - <groupId>io.swagger.core.v3</groupId> - <artifactId>swagger-annotations</artifactId> - <version>${swagger.version}</version> - </dependency> - <dependency> - <groupId>io.swagger.core.v3</groupId> - <artifactId>swagger-models</artifactId> - <version>${swagger.version}</version> - </dependency> - <!-- Gateway --> - <dependency> - <groupId>org.projectreactor</groupId> - <artifactId>reactor-spring</artifactId> - <version>1.0.1.RELEASE</version> - </dependency> </dependencies> - - <!-- build config in ./rest-service/pom.xml --> + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-dependencies</artifactId> + <version>${spring-cloud.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> </project> diff --git a/fda-database-managing-service/rest-service/pom.xml b/fda-database-managing-service/rest-service/pom.xml index fb89aa38b440a162b462c9d1ad66edb677813f02..60a1dbce9fd8dc0bd64ebaf830eed19c80d5e0dd 100644 --- a/fda-database-managing-service/rest-service/pom.xml +++ b/fda-database-managing-service/rest-service/pom.xml @@ -2,40 +2,47 @@ <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-database-managing-service</artifactId> <groupId>at.tuwien</groupId> <version>0.0.1-SNAPSHOT</version> </parent> + <modelVersion>4.0.0</modelVersion> <artifactId>rest-service</artifactId> - <version>0.0.1-SNAPSHOT</version> - <name>fda-database-managing-service-rest-services</name> <dependencies> <dependency> <groupId>at.tuwien</groupId> <artifactId>services</artifactId> - <version>0.0.1-SNAPSHOT</version> - <scope>compile</scope> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>api</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger2</artifactId> + <version>2.9.2</version> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger-ui</artifactId> + <version>2.9.2</version> </dependency> </dependencies> - <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- to make it exuteable with $ java -jar ./app.jar --> - </goals> - </execution> - </executions> + <configuration> + <finalName>${project.parent.artifactId}-${project.version}</finalName> + <mainClass>at.tuwien.application.FdaDatabaseManagingApplication</mainClass> + </configuration> </plugin> </plugins> </build> - </project> \ No newline at end of file diff --git a/fda-database-managing-service/rest-service/src/main/java/at/tuwien/FdaDatabaseManagingApplication.java b/fda-database-managing-service/rest-service/src/main/java/at/tuwien/application/FdaDatabaseManagingApplication.java similarity index 50% rename from fda-database-managing-service/rest-service/src/main/java/at/tuwien/FdaDatabaseManagingApplication.java rename to fda-database-managing-service/rest-service/src/main/java/at/tuwien/application/FdaDatabaseManagingApplication.java index 7d6e3fdcd82f76fd58537767f953417774c9ed37..41bbdcb26fe437e77c4ab0097ee1a63e22bb8aba 100644 --- a/fda-database-managing-service/rest-service/src/main/java/at/tuwien/FdaDatabaseManagingApplication.java +++ b/fda-database-managing-service/rest-service/src/main/java/at/tuwien/application/FdaDatabaseManagingApplication.java @@ -1,19 +1,13 @@ -package at.tuwien; +package at.tuwien.application; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.annotation.ComponentScan; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import springfox.documentation.oas.annotations.EnableOpenApi; import springfox.documentation.swagger2.annotations.EnableSwagger2; @SpringBootApplication -@EnableJpaAuditing -@EnableOpenApi -@EnableJpaRepositories(basePackages = {"at.tuwien.repository"}) -@EntityScan(basePackages = {"at.tuwien.entity"}) +@ComponentScan(basePackages = "at.tuwien") +@EnableSwagger2 public class FdaDatabaseManagingApplication { public static void main(String[] args) { diff --git a/fda-database-managing-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java b/fda-database-managing-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java index a3e8c822cdd309f17a65253573bf8b999e3cc8ba..0d92444ee3194203b0f2ddd83b7e394e72495b4c 100644 --- a/fda-database-managing-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java +++ b/fda-database-managing-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java @@ -5,7 +5,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.oas.annotations.EnableOpenApi; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.service.VendorExtension; @@ -15,28 +14,30 @@ import springfox.documentation.spring.web.plugins.Docket; import java.util.Collections; @Configuration -@EnableOpenApi public class SwaggerConfig { @Bean - public Docket databaseApi() { + public Docket swaggerConfiguration() { + return new Docket(DocumentationType.SWAGGER_2) - .groupName("database-api") - .apiInfo(apiInfo()) .select() - .paths(PathSelectors.ant("/api/**")) - .build(); + .paths(PathSelectors.ant("/database/*")) + .apis(RequestHandlerSelectors.basePackage("at.tuwien.controller")) + .build() + .apiInfo(apiInfo()); } private ApiInfo apiInfo() { return new ApiInfo("FDA-Database-Managing API", - "Service that can manage a database container", + "Service API for database managing", "1.0", null, - new Contact("Martin Weise", "https://informatics.tuwien.ac.at/people/martin-weise", "martin.weise@tuwien.ac.at"), + new Contact("Gökhan Dasdemir", "http://tuwien.at", "goekhan.dasdemir@tuwien.ac.at"), "API license", null, Collections.emptyList()); + + } } diff --git a/fda-database-managing-service/rest-service/src/main/java/at/tuwien/config/WebConfig.java b/fda-database-managing-service/rest-service/src/main/java/at/tuwien/config/WebConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..530c17637e5c6531225742584e2d3ff446722eea --- /dev/null +++ b/fda-database-managing-service/rest-service/src/main/java/at/tuwien/config/WebConfig.java @@ -0,0 +1,15 @@ +package at.tuwien.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**").allowedOrigins("*"); + } +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..b1e81592541475f1c2cb7c1d25017896d6e73f07 --- /dev/null +++ b/fda-database-managing-service/rest-service/src/main/java/at/tuwien/controller/DatabaseController.java @@ -0,0 +1,58 @@ +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 io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.reactive.function.client.ClientResponse; + +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +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") + @ApiResponses(value = {@ApiResponse(code = 201, message = "database created")}) + public Response 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(); + } + + + @GetMapping("/listDatabases") + public List<Database> listDatabases() { + LOGGER.debug("getting a list of created databases"); + return service.findAllCreatedDatabases(); + } + + +} 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 deleted file mode 100644 index 963817d1839f60fa38d9f051d8389681ee6a5ecb..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseController.java +++ /dev/null @@ -1,104 +0,0 @@ -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 io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import javax.validation.constraints.NotBlank; -import java.util.List; - -@RestController -@RequestMapping("/api/database") -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.") - @ApiResponses({ - @ApiResponse(code = 200, message = "All databases running in all containers are listed."), - @ApiResponse(code = 401, message = "Not authorized to list all databases."), - }) - 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 in a container", notes = "Creates a new database in a container. Note that the backend distincts between numerical (req: categories), nominal (req: max_length) and categorical (req: max_length, siUnit, min, max, mean, median, standard_deviation, histogram) column types.") - @ApiResponses({ - @ApiResponse(code = 201, message = "The database was successfully created."), - @ApiResponse(code = 400, message = "Parameters were set wrongfully, e.g. more attributes than required for column type."), - @ApiResponse(code = 401, message = "Not authorized to create a database"), - }) - public ResponseEntity<DatabaseDto> create(@Valid @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.BAD_REQUEST) - .build(); - } - - @GetMapping("/database/{id}") - @ApiOperation(value = "Get all informations about a database") - @ApiResponses({ - @ApiResponse(code = 200, message = "The database information is displayed."), - @ApiResponse(code = 400, message = "The payload contains invalid data."), - @ApiResponse(code = 404, message = "No database with this id was found in metadata database."), - }) - public ResponseEntity<DatabaseDto> findById(@NotBlank @RequestParam String id) { - return null; - } - - @PutMapping("/{id}") - @ApiOperation(value = "Modify a database (not part of sprint 1)") - @ApiResponses({ - @ApiResponse(code = 202, message = "The database was successfully modified."), - @ApiResponse(code = 400, message = "Parameters were set wrongfully, e.g. more attributes than required for column type."), - @ApiResponse(code = 401, message = "Not authorized to change a database."), - @ApiResponse(code = 404, message = "No database with this id was found in metadata database."), - }) - public ResponseEntity<DatabaseDto> modify(@NotBlank @RequestParam String id, @Valid @RequestBody DatabaseChangeDto changeDto) { - return ResponseEntity.status(HttpStatus.ACCEPTED) - .build(); - } - - @DeleteMapping("/{id}") - @ApiOperation(value = "Delete a database") - @ApiResponses({ - @ApiResponse(code = 202, message = "The database was successfully deleted."), - @ApiResponse(code = 401, message = "Not authorized to delete a database."), - @ApiResponse(code = 404, message = "No database with this id was found in metadata database."), - }) - public ResponseEntity delete(@NotBlank @RequestParam String id) { - return ResponseEntity.status(HttpStatus.OK) - .build(); - } - -} diff --git a/fda-database-managing-service/rest-service/src/main/resources/application-docker.properties b/fda-database-managing-service/rest-service/src/main/resources/application-docker.properties new file mode 100644 index 0000000000000000000000000000000000000000..f28468c85ada86890e7b92a82793365abbf63543 --- /dev/null +++ b/fda-database-managing-service/rest-service/src/main/resources/application-docker.properties @@ -0,0 +1,10 @@ +server.port=9092 +spring.application.name=fda-database-managing +spring.main.banner-mode=off +spring.cloud.loadbalancer.ribbon.enabled=false +logging.level.root=warn +logging.level.at.=info +logging.pattern.console=%d %highlight(%-5level): %msg%n +eureka.instance.hostname=fda-discovery-server +eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:9090/eureka/ +eureka.instance.preferIpAddress=true \ No newline at end of file diff --git a/fda-database-managing-service/rest-service/src/main/resources/application-docker.yml b/fda-database-managing-service/rest-service/src/main/resources/application-docker.yml deleted file mode 100644 index e9eaff0d84a0648b2e469fc76f9e19f6d2e1146d..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/rest-service/src/main/resources/application-docker.yml +++ /dev/null @@ -1,25 +0,0 @@ -spring: - main.banner-mode: off - datasource: - url: jdbc:postgresql://fda-metadata-db:5432/fda - driver-class-name: org.postgresql.Driver - username: postgres - password: postgres - jpa: - show-sql: true - database-platform: org.hibernate.dialect.PostgreSQLDialect - hibernate: - ddl-auto: update - application: - name: fda-container-managing - cloud: - loadbalancer.ribbon.enabled: false -server.port: 9092 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.: info -eureka: - instance.hostname: fda-discovery-server - client.serviceUrl.defaultZone: http://${eureka.instance.hostname}:9090/eureka/ \ No newline at end of file diff --git a/fda-database-managing-service/rest-service/src/main/resources/application.properties b/fda-database-managing-service/rest-service/src/main/resources/application.properties new file mode 100644 index 0000000000000000000000000000000000000000..8daba89719075e9548667301b51790cfc38c5e78 --- /dev/null +++ b/fda-database-managing-service/rest-service/src/main/resources/application.properties @@ -0,0 +1,3 @@ +spring.application.name=fda-database-managing +server.port=9092 +eureka.client.serviceUrl.defaultZone=http://localhost:9090/eureka/ \ No newline at end of file diff --git a/fda-database-managing-service/rest-service/src/main/resources/application.yml b/fda-database-managing-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index 41f5674804ffb8824a6e95e1b9bda591fd0aa1de..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,25 +0,0 @@ -spring: - main.banner-mode: off - datasource: - url: jdbc:postgresql://localhost:5432/fda - driver-class-name: org.postgresql.Driver - username: postgres - password: postgres - jpa: - show-sql: true - database-platform: org.hibernate.dialect.PostgreSQLDialect - hibernate: - ddl-auto: update - application: - name: fda-database-managing - cloud: - loadbalancer.ribbon.enabled: false -server.port: 9092 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.: debug -eureka: - instance.hostname: fda-discovery-server - client.serviceUrl.defaultZone: http://${eureka.instance.hostname}:9090/eureka/ \ No newline at end of file diff --git a/fda-database-managing-service/services/pom.xml b/fda-database-managing-service/services/pom.xml index 93113f0e41cb9eafa1f46fe4f378b844b2801f84..1161d7d87d50e1a52cee1b100a9747a91a514440 100644 --- a/fda-database-managing-service/services/pom.xml +++ b/fda-database-managing-service/services/pom.xml @@ -2,32 +2,26 @@ <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-database-managing-service</artifactId> <groupId>at.tuwien</groupId> <version>0.0.1-SNAPSHOT</version> </parent> + <modelVersion>4.0.0</modelVersion> <artifactId>services</artifactId> - <version>0.0.1-SNAPSHOT</version> - <name>fda-database-managing-service-services</name> <dependencies> <dependency> <groupId>at.tuwien</groupId> - <artifactId>gateways</artifactId> - <version>0.0.1-SNAPSHOT</version> - <scope>compile</scope> + <artifactId>api</artifactId> + <version>${project.version}</version> </dependency> <dependency> <groupId>at.tuwien</groupId> - <artifactId>api</artifactId> - <version>0.0.1-SNAPSHOT</version> - <scope>compile</scope> + <artifactId>gateways</artifactId> + <version>${project.version}</version> </dependency> </dependencies> - <!-- maven compile plugin for mapstruct and project lombok --> - </project> \ No newline at end of file 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 deleted file mode 100644 index db1840b0f3d6ab45f941907f6c0610ce506757f4..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/services/src/main/java/at/tuwien/entity/Auditable.java +++ /dev/null @@ -1,37 +0,0 @@ -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 deleted file mode 100644 index 738fe9531bbaac232073a99360f1fe4e75fd667e..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/services/src/main/java/at/tuwien/entity/Database.java +++ /dev/null @@ -1,34 +0,0 @@ -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; - -@Data -@Entity(name = "ddatabase") -@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 deleted file mode 100644 index b46f79ef61d4abeb818616f65d9501a099bdd030..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/services/src/main/java/at/tuwien/entity/Table.java +++ /dev/null @@ -1,23 +0,0 @@ -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; - -@Data -@Entity(name = "ttable") -@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 deleted file mode 100644 index aecbb0daadb53e4b37c32e7fbede4f8be82dc020..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/services/src/main/java/at/tuwien/entity/View.java +++ /dev/null @@ -1,24 +0,0 @@ -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; - -@Data -@Entity(name = "vview") -@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 deleted file mode 100644 index 917cf3f68fd743d79fb6b56dfd7ad050ba58f21c..0000000000000000000000000000000000000000 --- a/fda-database-managing-service/services/src/main/java/at/tuwien/repository/DatabaseRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -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 dfcad17cbb1436c1a4ba10f669fbd07525d5ae6b..44c644b30245e56b87e5814d8f409702d0e9d419 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,9 +1,9 @@ package at.tuwien.service; import at.tuwien.clients.FdaContainerManagingClient; -import at.tuwien.dto.database.DatabaseCreateDto; + +import at.tuwien.dto.CreateDatabaseDTO; import at.tuwien.model.Database; -import at.tuwien.repository.DatabaseRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -14,16 +14,13 @@ public class DatabaseService { private FdaContainerManagingClient client; - private final DatabaseRepository databaseRepository; - @Autowired - public DatabaseService(FdaContainerManagingClient client, DatabaseRepository databaseRepository) { + public DatabaseService(FdaContainerManagingClient client) { this.client = client; - this.databaseRepository = databaseRepository; } - public boolean createDatabase(DatabaseCreateDto dto) { - + public boolean createDatabase(CreateDatabaseDTO dto) { + return client.createDatabaseContainer(dto); } public List<Database> findAllCreatedDatabases() { diff --git a/fda-query-service/gateways/src/main/java/at/tuwien/client/FdaContainerManagingClient.java b/fda-query-service/gateways/src/main/java/at/tuwien/client/FdaContainerManagingClient.java index 610be0cb46797ea9b90b8df97b8f212ea89ea5b6..dcbda19bccb32466bed9846d383da3080aa6afdc 100644 --- a/fda-query-service/gateways/src/main/java/at/tuwien/client/FdaContainerManagingClient.java +++ b/fda-query-service/gateways/src/main/java/at/tuwien/client/FdaContainerManagingClient.java @@ -24,7 +24,7 @@ public class FdaContainerManagingClient { DatabaseContainer databaseContainer = webClientBuilder .build() .get() - .uri("http://fda-container-managing/at.tuwien.api/getDatabaseContainerByContainerID?containerID=" + containerID) + .uri("http://fda-container-managing/api/getDatabaseContainerByContainerID?containerID=" + containerID) .retrieve() .bodyToMono(DatabaseContainer.class) .block(); diff --git a/fda-table-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java b/fda-table-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java index b0b0eda18a5f5c08449523141c6a8a6f6a34453a..ba71a43d6e26b6fca792ea38239176dd722cb160 100644 --- a/fda-table-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java +++ b/fda-table-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java @@ -27,7 +27,7 @@ public class SwaggerConfig { private ApiInfo apiInfo() { return new ApiInfo("FDA-Table-Service API", - "Service API for table at.tuwien.service", + "Service API for table service", "1.0", null, new Contact("Gökhan Dasdemir", "http://tuwien.at", "goekhan.dasdemir@tuwien.ac.at"),