diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml index 7817c84c7f6da1e595b076148cc8bdc105cdda08..362a4d91b18d5912a2bfce52273d8b39b92184ff 100644 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -83,6 +83,7 @@ services: - ./config/import-realms.sh:/docker-entrypoint-initdb.d/import-realms.sh - ./config/master-realm.json:/opt/keycloak/data/import/master-realm.json - ./config/dbrepo-realm.json:/opt/keycloak/data/import/dbrepo-realm.json + - ./config/create-event-listener.jar:/opt/bitnami/keycloak/providers/create-event-listener.jar ports: - "8080:8080" environment: @@ -93,6 +94,9 @@ services: KEYCLOAK_DATABASE_NAME: "${AUTH_DB_NAME:-keycloak}" KEYCLOAK_DATABASE_USER: "${AUTH_DB_USERNAME:-keycloak}" KEYCLOAK_DATABASE_PASSWORD: "${AUTH_DB_PASSWORD:-dbrepo}" + METADATA_SERVICE_ENDPOINT: "${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080}/api/user" + SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" + SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" healthcheck: test: curl --head -fsS http://localhost:9000/health/ready interval: 10s @@ -109,7 +113,12 @@ services: dbrepo-auth-service-init: init: true restart: "no" +<<<<<<< Updated upstream image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.6.0 +======= + container_name: dbrepo-auth-service-init + image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.6.3 +>>>>>>> Stashed changes environment: AUTH_SERVICE_ADMIN: ${AUTH_SERVICE_ADMIN:-admin} AUTH_SERVICE_ADMIN_PASSWORD: ${AUTH_SERVICE_ADMIN_PASSWORD:-admin} @@ -130,7 +139,11 @@ services: restart: "no" container_name: dbrepo-metadata-service hostname: metadata-service +<<<<<<< Updated upstream image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.6.0 +======= + image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.6.3 +>>>>>>> Stashed changes volumes: - "${SHARED_VOLUME:-/tmp}:/tmp" environment: @@ -193,7 +206,11 @@ services: restart: "no" container_name: dbrepo-analyse-service hostname: analyse-service +<<<<<<< Updated upstream image: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.6.0 +======= + image: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.6.3 +>>>>>>> Stashed changes environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -248,7 +265,11 @@ services: restart: "no" container_name: dbrepo-search-db hostname: search-db +<<<<<<< Updated upstream image: registry.datalab.tuwien.ac.at/dbrepo/search-db:1.6.0 +======= + image: registry.datalab.tuwien.ac.at/dbrepo/search-db:1.6.3 +>>>>>>> Stashed changes healthcheck: test: curl -sSL localhost:9200/_plugins/_security/health | jq .status | grep UP interval: 10s @@ -272,7 +293,11 @@ services: restart: "no" container_name: dbrepo-search-service hostname: search-service +<<<<<<< Updated upstream image: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.6.0 +======= + image: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.6.3 +>>>>>>> Stashed changes environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT_SECRET:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -294,7 +319,11 @@ services: restart: "no" container_name: dbrepo-ui hostname: ui +<<<<<<< Updated upstream image: registry.datalab.tuwien.ac.at/dbrepo/ui:1.6.0 +======= + image: registry.datalab.tuwien.ac.at/dbrepo/ui:1.6.3 +>>>>>>> Stashed changes environment: NUXT_PUBLIC_API_CLIENT: "${BASE_URL:-http://localhost}" NUXT_PUBLIC_API_SERVER: "${BASE_URL:-http://localhost}" @@ -363,7 +392,11 @@ services: init: true container_name: dbrepo-search-service-init hostname: search-service-init +<<<<<<< Updated upstream image: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.6.0 +======= + image: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.6.3 +>>>>>>> Stashed changes environment: METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} OPENSEARCH_HOST: ${OPENSEARCH_HOST:-search-db} @@ -417,7 +450,11 @@ services: restart: "no" container_name: dbrepo-dashboard-service hostname: dashboard-service +<<<<<<< Updated upstream image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service:1.6.0 +======= + image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service:1.6.3 +>>>>>>> Stashed changes ports: - "3000:3000" volumes: @@ -444,7 +481,11 @@ services: init: true container_name: dbrepo-storage-service-init hostname: storage-service-init +<<<<<<< Updated upstream image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.6.0 +======= + image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.6.3 +>>>>>>> Stashed changes environment: S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-seaweedfsadmin} S3_BUCKET: "${S3_BUCKET:-dbrepo}" @@ -489,7 +530,11 @@ services: restart: "no" container_name: dbrepo-data-service hostname: data-service +<<<<<<< Updated upstream image: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.6.0 +======= + image: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.6.3 +>>>>>>> Stashed changes volumes: - "${SHARED_VOLUME:-/tmp}:/tmp" environment: diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8bf70c0c712a5b76676b1d10d8663ff1f02a4923..9caa24b2538dfe7c523b8f8ae4bd3023f86c4f5b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -81,6 +81,48 @@ lint-helm-chart: - helm dependency update ./helm/dbrepo script: - helm lint ./helm/dbrepo +<<<<<<< Updated upstream +======= + - helm schema -input ./helm/dbrepo/values.yaml -output ./helm/dbrepo/values.schema.json + - diff ./CI_values.schema.json ./helm/dbrepo/values.schema.json + - diff ./dbrepo-metadata-db/1_setup-schema.sql ./helm/dbrepo/files/01-setup-schema.sql + - diff ./dbrepo-auth-service/listeners/target/create-event-listener.jar ./helm/dbrepo/files/create-event-listener.jar + artifacts: + when: always + paths: + - ./helm/dbrepo/values.schema.json + expire_in: 1 days + +lint-helm-readme: + image: docker.io/node:${NODE_VERSION}-alpine${ALPINE_VERSION} + stage: lint + before_script: + - apk --no-cache add alpine-sdk bash git + - cp ./helm/dbrepo/README.md ./CI_README.md + - git clone https://github.com/bitnami/readme-generator-for-helm + - (cd ./readme-generator-for-helm && npm install && npm install -g pkg && pkg . -o /usr/local/sbin/readme-generator) + script: + - readme-generator --readme ./helm/dbrepo/README.md --values ./helm/dbrepo/values.yaml + - diff ./CI_README.md ./helm/dbrepo/README.md + artifacts: + when: always + paths: + - ./helm/dbrepo/README.md + expire_in: 1 days + +lint-open-api-version: + image: docker.io/alpine:${ALPINE_VERSION} + stage: lint + variables: + VERSION: 4.45.1 + BINARY: yq_linux_amd64 + before_script: + - 'apk --no-cache add bash wget' + - 'wget https://github.com/mikefarah/yq/releases/download/v${VERSION}/${BINARY} -O /usr/bin/yq && chmod +x /usr/bin/yq' + script: + - yq '.externalDocs.url' ./.docs/.openapi/api.base.yaml | grep "${DOC_VERSION}" + - yq '.info.version' ./.docs/.openapi/api.base.yaml | grep "${DOC_VERSION}" +>>>>>>> Stashed changes build-metadata-service: image: maven:3-openjdk-${JAVA_VERSION} diff --git a/dbrepo-analyse-service/Pipfile.lock b/dbrepo-analyse-service/Pipfile.lock index 546ead5c1426cc9772320ba2652fe90eb9467255..aecb60a478cf0d29d601c233a7a538f060d6af00 100644 --- a/dbrepo-analyse-service/Pipfile.lock +++ b/dbrepo-analyse-service/Pipfile.lock @@ -1,7 +1,11 @@ { "_meta": { "hash": { +<<<<<<< Updated upstream "sha256": "683cc19a3205b9b5f9b99db8b71c0abadadfd652a94dcf710a73aeca92b97227" +======= + "sha256": "9cc4c161729b642069bbf4ab379c0f4a9122035afcb3ac7b5b1bfc13281f76aa" +>>>>>>> Stashed changes }, "pipfile-spec": 6, "requires": { @@ -412,8 +416,12 @@ }, "dbrepo": { "hashes": [ +<<<<<<< Updated upstream "sha256:1495b7efa016d75a2f978cf20aa1729d8dee2809583f2c253264f7fd3233addb", "sha256:839a4f5810d83e93b1fa88c7ab7641727b65af1d0eada93195d3f0daa3e13e5a" +======= + "sha256:7f98329f08d1da6fe45da8130cfb3ebd6e947a4101d46f92b31d7204b29a153d" +>>>>>>> Stashed changes ], "markers": "python_version >= '3.11'", "path": "./lib/dbrepo-1.6.1.tar.gz" diff --git a/dbrepo-auth-service/listeners/target/create-event-listener.jar b/dbrepo-auth-service/listeners/target/create-event-listener.jar new file mode 100644 index 0000000000000000000000000000000000000000..221bdd325f056ff953e0a44a46773470eb08e91e Binary files /dev/null and b/dbrepo-auth-service/listeners/target/create-event-listener.jar differ diff --git a/dbrepo-data-service/Dockerfile b/dbrepo-data-service/Dockerfile index f4e2be5b967ca109e858d6f17099ec67d341ac12..7c7b1431a91736edd485f4cd53096a92a0e6d99c 100644 --- a/dbrepo-data-service/Dockerfile +++ b/dbrepo-data-service/Dockerfile @@ -6,22 +6,26 @@ LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" FROM maven:3-amazoncorretto-17 AS build LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" +<<<<<<< Updated upstream COPY ./pom.xml ./ RUN mvn -fn -B dependency:go-offline +======= +>>>>>>> Stashed changes COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien COPY ./querystore ./querystore COPY ./report ./report COPY ./rest-service ./rest-service COPY ./services ./services +COPY ./pom.xml ./ # Make sure it compiles RUN mvn clean package -DskipTests ###### THIRD STAGE ###### -FROM amazoncorretto:17-alpine3.19 AS runtime +FROM amazoncorretto:17-alpine3.21 AS runtime LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" RUN apk add --no-cache curl bash jq @@ -32,7 +36,7 @@ RUN adduser -S -u 1001 data-service USER 1001 -COPY --from=build --chown=1001 ./rest-service/target/rest-service-*.jar ./data-service.jar +COPY --from=build --chown=1001 ./rest-service/target/data-service.jar ./data-service.jar # non-root port EXPOSE 8080 diff --git a/dbrepo-data-service/pom.xml b/dbrepo-data-service/pom.xml index 884824994aff8a6e8f05bce24c44307ffe64c2b8..72a7114c0fcf859de5f8e224c8aecc3c8f4bf9c5 100644 --- a/dbrepo-data-service/pom.xml +++ b/dbrepo-data-service/pom.xml @@ -292,6 +292,7 @@ </dependencies> <build> + <finalName>data-service</finalName> <resources> <resource> <directory>${basedir}/src/main/resources</directory> diff --git a/dbrepo-metadata-service/Dockerfile b/dbrepo-metadata-service/Dockerfile index 843c334a9acb3d24e061c42c72cb75c6068ef954..4a519abc9f234be4764646878b4e1f7eb9c815e3 100644 --- a/dbrepo-metadata-service/Dockerfile +++ b/dbrepo-metadata-service/Dockerfile @@ -1,5 +1,5 @@ ###### FIRST STAGE ###### -FROM maven:3-amazoncorretto-17 AS build +FROM maven:3-amazoncorretto-17-alpine AS build LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" COPY ./pom.xml ./ @@ -12,7 +12,11 @@ COPY ./rest-service/pom.xml ./rest-service/ COPY ./services/pom.xml ./services/ COPY ./test/pom.xml ./test/ +<<<<<<< Updated upstream RUN mvn verify -B -fn +======= +RUN mvn dependency:go-offline +>>>>>>> Stashed changes COPY ./api ./api COPY ./entities ./entities @@ -27,7 +31,7 @@ COPY ./test ./test RUN mvn clean install -DskipTests ###### SECOND STAGE ###### -FROM amazoncorretto:17-alpine3.19 AS runtime +FROM amazoncorretto:17-alpine3.21 AS runtime LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" RUN apk add --no-cache curl bash jq @@ -36,9 +40,9 @@ WORKDIR /app USER 1001 -COPY --from=build --chown=1001 ./rest-service/target/dbrepo-metadata-service-rest-service-*.jar ./metadata-service.jar +COPY --from=build --chown=1001 ./rest-service/target/metadata-service.jar ./metadata-service.jar # non-root port EXPOSE 8080 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./metadata-service.jar"] +ENTRYPOINT ["java", "-jar", "./metadata-service.jar"] diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java index 9928c8e54d39287fc7a19bf84b6a99c7429f69bd..c1285fb21e65ddbf2f085a93d17d12e19308cd74 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java @@ -14,6 +14,10 @@ import java.time.Instant; @Getter @Setter @Builder +<<<<<<< Updated upstream +======= +@EqualsAndHashCode(callSuper = false) +>>>>>>> Stashed changes @NoArgsConstructor @AllArgsConstructor @Jacksonized diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java index 5fc253c4335044a1eaabbb43d02f7ae07510178b..307e497c3f37bd7e93e5b6c1972a9e392c0db689 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java @@ -16,7 +16,11 @@ import java.util.List; @Getter @Setter @Builder +<<<<<<< Updated upstream @EqualsAndHashCode +======= +@EqualsAndHashCode(callSuper = false) +>>>>>>> Stashed changes @NoArgsConstructor @AllArgsConstructor @Jacksonized @@ -61,6 +65,12 @@ public class DatabaseDto { @Schema(example = "true") private Boolean isSchemaPublic; +<<<<<<< Updated upstream +======= + @NotNull + private ContainerDto container; + +>>>>>>> Stashed changes @NotNull private ContainerBriefDto container; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java index d1ee156e9b95c09a9dd31c1ddf01926818f75879..1c8eaf64b74139eb9b5ea1021d43179ae9ceb251 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java @@ -14,7 +14,11 @@ import java.util.List; @Getter @Setter @Builder +<<<<<<< Updated upstream @EqualsAndHashCode +======= +@EqualsAndHashCode(callSuper = false) +>>>>>>> Stashed changes @NoArgsConstructor @AllArgsConstructor @Jacksonized @@ -60,6 +64,12 @@ public class ViewDto { @Schema(example = "7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916") private String queryHash; +<<<<<<< Updated upstream +======= + @ToString.Exclude + private DatabaseDto database; + +>>>>>>> Stashed changes @NotNull private UserBriefDto owner; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java index 67087d438daedf60cd0236a8f5427310b06464e4..d58d0af8a0205ae23864d62b50e228d8b07a1334 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java @@ -17,7 +17,11 @@ import java.util.List; @Getter @Setter @Builder +<<<<<<< Updated upstream @EqualsAndHashCode +======= +@EqualsAndHashCode(callSuper = false) +>>>>>>> Stashed changes @NoArgsConstructor @AllArgsConstructor @Jacksonized @@ -100,6 +104,12 @@ public class TableDto { @NotNull private List<ColumnDto> columns; +<<<<<<< Updated upstream +======= + @ToString.Exclude + private DatabaseDto database; + +>>>>>>> Stashed changes @NotNull private ConstraintsDto constraints; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java index 343d582b55da3af324aa23fd31ef61d8e1cd564d..f6cdbf353465e932a895095537d882320efec503 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java @@ -11,7 +11,11 @@ import java.util.UUID; @Getter @Setter @Builder +<<<<<<< Updated upstream @EqualsAndHashCode +======= +@EqualsAndHashCode(callSuper = false) +>>>>>>> Stashed changes @NoArgsConstructor @AllArgsConstructor @Jacksonized diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java index a2fb1264cc360f0de0d5502306b215d79a442a70..85391d31d420922af21b899f9deefae981886c00 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java @@ -54,7 +54,6 @@ public class Container { @Column private String uiAdditionalFlags; - @EqualsAndHashCode.Exclude @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @JoinColumns({ @JoinColumn(name = "cid", referencedColumnName = "id", insertable = false, updatable = false) @@ -67,13 +66,11 @@ public class Container { }) private ContainerImage image; - @EqualsAndHashCode.Exclude @CreatedDate @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; - @EqualsAndHashCode.Exclude @LastModifiedDate @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java index 7e04ce2086c3b4e9e677548b106cc28ddc9756ee..2bbd65be6c87bd19fbd3af449e04f1b7a08f412a 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java @@ -60,13 +60,11 @@ public class ContainerImage { @OneToMany(fetch = FetchType.LAZY, mappedBy = "image") private List<Container> containers; - @EqualsAndHashCode.Exclude @CreatedDate @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; - @EqualsAndHashCode.Exclude @LastModifiedDate @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/DataType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/DataType.java index 5f4ddbfb8c6dd8a657a88432d4606fa6f9c56f7e..d94b39ec259a5c04ff44f5f4477b3aa482121e6e 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/DataType.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/DataType.java @@ -68,7 +68,6 @@ public class DataType { private Boolean buildable; @ToString.Exclude - @EqualsAndHashCode.Exclude @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumns({ @JoinColumn(name = "image_id", referencedColumnName = "id") diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/Operator.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/Operator.java index 1ecedc5e16cef533008a28db7d022acab336c8d7..8ec4763ba292db50af6d10aa5adf8b9fe073782f 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/Operator.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/Operator.java @@ -32,7 +32,6 @@ public class Operator { private String documentation; @ToString.Exclude - @EqualsAndHashCode.Exclude @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumns({ @JoinColumn(name = "image_id", referencedColumnName = "id") diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java index d90a702db33c759a511480fa0e89c37efc2773fc..699f50b79ba16def84366f73e117cce1948168b2 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java @@ -120,13 +120,11 @@ public class Database implements Serializable { @Column(columnDefinition = "LONGBLOB") private byte[] image; - @EqualsAndHashCode.Exclude @CreatedDate @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; - @EqualsAndHashCode.Exclude @LastModifiedDate @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java index 6a2622be3e7137c97b68ab9ad91e24edd4fae293..6df3aa5129eb51cc66ea32341ae8bcfc924ee3f1 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java @@ -33,7 +33,6 @@ public class DatabaseAccess { private UUID huserid; @ToString.Exclude - @EqualsAndHashCode.Exclude @org.springframework.data.annotation.Transient @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @@ -46,7 +45,6 @@ public class DatabaseAccess { private Long hdbid; @ToString.Exclude - @EqualsAndHashCode.Exclude @org.springframework.data.annotation.Transient @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java index 67e6d6d18ac26a1cb2641ed45ae9e969c7393164..3835c0188bb03682becd113a6df4ce6bd5dcd615 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java @@ -89,7 +89,6 @@ public class View { private List<Identifier> identifiers; @ToString.Exclude - @EqualsAndHashCode.Exclude @org.springframework.data.annotation.Transient @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @@ -103,13 +102,11 @@ public class View { @OrderBy("ordinalPosition") private List<ViewColumn> columns; - @EqualsAndHashCode.Exclude @CreatedDate @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; - @EqualsAndHashCode.Exclude @LastModifiedDate @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java index 7ef6e8b9d63c30e05313514c78ad562306318185..752f784e9031492951b1e732e2302b76fa017208 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java @@ -26,7 +26,6 @@ public class ViewColumn implements Comparable<ViewColumn> { private Long id; @ToString.Exclude - @EqualsAndHashCode.Exclude @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumns({ @JoinColumn(name = "view_id", referencedColumnName = "id", nullable = false) diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java index 3cdb01d7d38477cc8a77b4e12ed9af61d04ecfba..088f0b7a8c47e1b44faa67c425eaa5e093d4a312 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java @@ -25,7 +25,7 @@ import static jakarta.persistence.GenerationType.IDENTITY; @Data @Entity -@Builder +@Builder(toBuilder = true) @Log4j2 @ToString @AllArgsConstructor @@ -69,7 +69,6 @@ public class Table { private String description; @ToString.Exclude - @EqualsAndHashCode.Exclude @org.springframework.data.annotation.Transient @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @@ -117,13 +116,11 @@ public class Table { @OrderBy("ordinalPosition") private List<TableColumn> columns; - @EqualsAndHashCode.Exclude @CreatedDate @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; - @EqualsAndHashCode.Exclude @LastModifiedDate @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java index 9f4c4e0606802a475e5873e3d0ebc57455a6a0e2..459cb69f4bc5c00d04e021301a460b6ba25d6dc4 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java @@ -36,7 +36,6 @@ public class TableColumn implements Comparable<TableColumn> { private Long id; @ToString.Exclude - @EqualsAndHashCode.Exclude @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumns({ @JoinColumn(name = "tID", referencedColumnName = "id", nullable = false) @@ -114,13 +113,11 @@ public class TableColumn implements Comparable<TableColumn> { @Column(name = "std_dev") private BigDecimal stdDev; - @EqualsAndHashCode.Exclude @CreatedDate @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; - @EqualsAndHashCode.Exclude @LastModifiedDate @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java index 5a9e8292be0af3e99050bc87be1ba7b8b9756bf7..2bea4c61129a2dfde120539c6647632931ea7ff3 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java @@ -42,7 +42,6 @@ public class TableColumnConcept { @Column(columnDefinition = "TEXT") private String description; - @EqualsAndHashCode.Exclude @CreatedDate @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java index 7e8fe915b3b9de49e53eb0806da1f5ed03608a1d..e58cbed6599e5c7b8e74fa13097446ce40195766 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java @@ -42,7 +42,6 @@ public class TableColumnUnit { @Column(columnDefinition = "TEXT") private String description; - @EqualsAndHashCode.Exclude @CreatedDate @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java index 76de9463cfa37048fb45d2b091b472190124ff1b..a24cffcd2aed92ec71d1a1ea7b1bcb559806ad95 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java @@ -29,7 +29,6 @@ public class ForeignKey { private String name; @ToString.Exclude - @EqualsAndHashCode.Exclude @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @JoinColumns({ @JoinColumn(name = "tid", referencedColumnName = "id", nullable = false) @@ -37,7 +36,6 @@ public class ForeignKey { private Table table; @ToString.Exclude - @EqualsAndHashCode.Exclude @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @JoinColumns({ @JoinColumn(name = "rtid", referencedColumnName = "id", nullable = false) diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java index ed2691fc524a3de33788ed977b1ba213b18b5bfe..5d6c2043aebf7836aced4a16a429ab55e88bb0d4 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java @@ -26,7 +26,6 @@ public class ForeignKeyReference { private Long id; @ToString.Exclude - @EqualsAndHashCode.Exclude @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumn(name = "fkid", referencedColumnName = "fkid", nullable = false) private ForeignKey foreignKey; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/primaryKey/PrimaryKey.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/primaryKey/PrimaryKey.java index 407e2fb7f3f98b6a8b65d28636c92afaceb3e69c..40452ce0205802880c96fb3d7689ed1e40c59012 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/primaryKey/PrimaryKey.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/primaryKey/PrimaryKey.java @@ -25,7 +25,6 @@ public class PrimaryKey { private Long id; @ToString.Exclude - @EqualsAndHashCode.Exclude @org.springframework.data.annotation.Transient @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumns({ @@ -34,7 +33,6 @@ public class PrimaryKey { private Table table; @ToString.Exclude - @EqualsAndHashCode.Exclude @org.springframework.data.annotation.Transient @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumns({ diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java index c0dfc467109cf794dda89925393b442286254da5..fb10dad8ad8ba71584d015d7e8e09990f2d6f5aa 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java @@ -30,7 +30,6 @@ public class Unique { private String name; @ToString.Exclude - @EqualsAndHashCode.Exclude @org.springframework.data.annotation.Transient @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumns({ @@ -38,7 +37,6 @@ public class Unique { }) private Table table; - @EqualsAndHashCode.Exclude @org.springframework.data.annotation.Transient @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinTable( diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java index b98a1b8c6b7509ef0772f69e2af343b1b63d386e..49d4df1b35b6d7b7f937121e57c6e9e278630467 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java @@ -138,7 +138,6 @@ public class Identifier implements Serializable { * Databases are never created/updated/deleted by the Identifier entity. */ @ToString.Exclude - @EqualsAndHashCode.Exclude @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "dbid", referencedColumnName = "id", nullable = false, updatable = false) @@ -166,12 +165,10 @@ public class Identifier implements Serializable { }) private User owner; - @EqualsAndHashCode.Exclude @CreatedDate @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") private Instant created; - @EqualsAndHashCode.Exclude @LastModifiedDate @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java index 576aab1e375028a9a776ae96cb0ea983f84e7274..2e796c859a1fba23d605f55f81ecf0e9be991f26 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java @@ -46,12 +46,10 @@ public class Ontology { @Column private String rdfPath; - @EqualsAndHashCode.Exclude @CreatedDate @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") private Instant created; - @EqualsAndHashCode.Exclude @LastModifiedDate @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java index fd87852c6ecce0e2e614a9c7dd05a5e41cfe2e16..bc17ab9bc925cd92954c05bd10aa56457dd730e4 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java @@ -52,7 +52,6 @@ public class User { private String language; @OneToMany(fetch = FetchType.LAZY) - @EqualsAndHashCode.Exclude @JoinColumns({ @JoinColumn(name = "user_id", referencedColumnName = "ID", insertable = false, updatable = false) }) diff --git a/dbrepo-metadata-service/pom.xml b/dbrepo-metadata-service/pom.xml index 2803d9b5f39ddd69f34151251083c35e8a46b406..a02d2ebe7773072438b627f80d1d0931fcb21ef0 100644 --- a/dbrepo-metadata-service/pom.xml +++ b/dbrepo-metadata-service/pom.xml @@ -99,6 +99,10 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-webflux</artifactId> + </dependency> <!-- Open API --> <dependency> <groupId>org.springdoc</groupId> @@ -271,6 +275,7 @@ </dependencies> <build> + <finalName>metadata-service</finalName> <resources> <resource> <directory>${basedir}/src/main/resources</directory> diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceConnectionException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceConnectionException.java index d68185102a00e33419ae8cf2c4250c0775082a23..2cf18262d3069f6369026e64508a687f3d2e419a 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceConnectionException.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceConnectionException.java @@ -4,7 +4,7 @@ import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(code = HttpStatus.BAD_GATEWAY, reason = "error.search.connection") -public class SearchServiceConnectionException extends Exception { +public class SearchServiceConnectionException extends RuntimeException { public SearchServiceConnectionException(String msg) { super(msg); diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceException.java index aef3ae7f7cd75db6ec7ed59f95980f2c8e021c2b..528b3aadd1e0cdd0ea9ef6c19374f29b8d62ab15 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceException.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceException.java @@ -4,7 +4,7 @@ import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE, reason = "error.search.invalid") -public class SearchServiceException extends Exception { +public class SearchServiceException extends RuntimeException { public SearchServiceException(String message) { super(message); diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java index 9f4542fc023f8aaf336fc2de196d0c36ab93cea4..af9f36aa8ac34df69b412d24995a307b63e134a9 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java @@ -1,7 +1,12 @@ package at.tuwien.endpoints; +<<<<<<< Updated upstream import at.tuwien.api.database.table.TableBriefDto; import at.tuwien.api.database.table.TableCreateDto; +======= +import at.tuwien.api.database.table.CreateTableDto; +import at.tuwien.api.database.table.TableBriefDto; +>>>>>>> Stashed changes import at.tuwien.api.database.table.TableDto; import at.tuwien.api.database.table.TableUpdateDto; import at.tuwien.api.database.table.columns.ColumnDto; @@ -369,9 +374,14 @@ public class TableEndpoint extends AbstractEndpoint { final Database database = databaseService.findById(databaseId); endpointValidator.validateOnlyAccess(database, principal, true); endpointValidator.validateColumnCreateConstraints(data); + final Table table = tableService.createTable(database, data, principal); return ResponseEntity.status(HttpStatus.CREATED) +<<<<<<< Updated upstream .body(metadataMapper.customTableToTableDto( tableService.createTable(database, data, principal))); +======= + .body(metadataMapper.tableToTableBriefDto(table)); +>>>>>>> Stashed changes } @PutMapping("/{tableId}") diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/datatypes.json b/dbrepo-metadata-service/rest-service/src/main/resources/datatypes.json deleted file mode 100644 index 3779d12cbe32b67fa163cf6b0285b9e01f7dc681..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/rest-service/src/main/resources/datatypes.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "name": "", - "size": { - "min": 0, - "required": true - }, - "d": { - "required": false - }, - "documentation": "https://mariadb.com/kb/en/bigint/", - "quoted": false, - "buildable": true - } -] \ No newline at end of file diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java index 182fe8e14ac5cd63ad1752fec07ee9b511ba8726..9ec106fda60eb0757e40a5ea30659519f63f740f 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java @@ -39,8 +39,7 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; @ExtendWith(SpringExtension.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @@ -140,8 +139,14 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { /* mock */ when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(dataCiteBodyParameterizedTypeReference))) .thenReturn(mock); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ dataCiteIdentifierService.save(DATABASE_1, USER_1, IDENTIFIER_1_SAVE_DTO); @@ -155,8 +160,14 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { doThrow(HttpClientErrorException.BadRequest.class) .when(restTemplate) .exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(dataCiteBodyParameterizedTypeReference)); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ assertThrows(MalformedException.class, () -> { @@ -172,8 +183,14 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { doThrow(RestClientException.class) .when(restTemplate) .exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(dataCiteBodyParameterizedTypeReference)); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ assertThrows(DataServiceConnectionException.class, () -> { @@ -331,8 +348,14 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { IdentifierNotFoundException, SearchServiceException, SearchServiceConnectionException { /* mock */ +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ dataCiteIdentifierService.delete(IDENTIFIER_1); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java index 1b6570abd821337fe032bead021cf9d5a4b9fc8c..40244839e1d0d4b9fd4f553ecd559bc9d1eabef9 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java @@ -109,8 +109,14 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { /* mock */ when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final Database response = databaseService.modifyImage(DATABASE_1, image); @@ -163,8 +169,14 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { .thenReturn(List.of()); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final Database response = databaseService.updateViewMetadata(DATABASE_1); @@ -221,8 +233,14 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { .thenReturn(List.of(VIEW_1_DTO, VIEW_2_DTO, VIEW_3_DTO, VIEW_4_DTO)); /* <<< */ when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final Database response = databaseService.updateViewMetadata(DATABASE_1); @@ -239,8 +257,14 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { .thenReturn(List.of(VIEW_1_DTO, VIEW_2_DTO, VIEW_3_DTO)); /* <<< */ when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final Database response = databaseService.updateViewMetadata(DATABASE_1); @@ -257,8 +281,17 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { .thenReturn(List.of()); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final Database response = databaseService.updateTableMetadata(DATABASE_1); @@ -275,8 +308,14 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { .thenReturn(List.of(TABLE_1_DTO, TABLE_2_DTO, TABLE_3_DTO, TABLE_4_DTO)); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final Database response = databaseService.updateTableMetadata(DATABASE_1); @@ -293,8 +332,14 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { .thenReturn(List.of(TABLE_1_DTO, TABLE_2_DTO, TABLE_3_DTO, TABLE_4_DTO, TABLE_5_DTO)); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final Database response = databaseService.updateTableMetadata(DATABASE_1); @@ -516,8 +561,14 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { ContainerNotFoundException, SearchServiceException, SearchServiceConnectionException { /* mock */ +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java index 0c87dcdd692533cd751401f9be37fee69b5186cc..55c7f17511e685b875a6bab537e5da1b89cf332a 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java @@ -35,6 +35,7 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.when; @Log4j2 @@ -175,8 +176,14 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { /* mock */ when(dataServiceGateway.findQuery(IDENTIFIER_5_DATABASE_ID, IDENTIFIER_5_QUERY_ID)) .thenReturn(QUERY_2_DTO); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_2_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ identifierService.save(DATABASE_2, USER_2, IDENTIFIER_5_SAVE_DTO); @@ -285,8 +292,14 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { SearchServiceConnectionException { /* mock */ +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ identifierService.delete(IDENTIFIER_1); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java index 3126f9e9f42b36fb8dc09dfa3f8e60c88d851722..1bad05c0825ab4651d19cc23d3fe600d9d4dc8eb 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java @@ -1,9 +1,16 @@ package at.tuwien.service; +<<<<<<< Updated upstream import at.tuwien.api.database.table.TableCreateDto; import at.tuwien.api.database.table.columns.ColumnCreateDto; import at.tuwien.api.database.table.columns.ColumnTypeDto; import at.tuwien.api.database.table.constraints.ConstraintsCreateDto; +======= +import at.tuwien.api.database.table.CreateTableDto; +import at.tuwien.api.database.table.columns.ColumnTypeDto; +import at.tuwien.api.database.table.columns.CreateTableColumnDto; +import at.tuwien.api.database.table.constraints.CreateTableConstraintsDto; +>>>>>>> Stashed changes import at.tuwien.entities.database.Database; import at.tuwien.entities.database.table.Table; import at.tuwien.entities.database.table.columns.TableColumn; @@ -111,8 +118,14 @@ public class TableServicePersistenceTest extends AbstractUnitTest { doNothing() .when(dataServiceGateway) .createTable(DATABASE_1_ID, request); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final Table response = tableService.createTable(DATABASE_1, request, USER_1_PRINCIPAL); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java index d975e808e3dd03e3b4fd0f27d3af4b60f4fec7a1..0b7d8f5bc65b010b8c93b2d41a286f28e3c10b87 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java @@ -134,8 +134,14 @@ public class TableServiceUnitTest extends AbstractUnitTest { .thenReturn(TABLE_8_STATISTIC_DTO); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ tableService.updateStatistics(TABLE_8); @@ -223,8 +229,14 @@ public class TableServiceUnitTest extends AbstractUnitTest { .thenReturn(CONCEPT_1); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final TableColumn response = tableService.update(TABLE_1_COLUMNS.get(0), request); @@ -255,8 +267,14 @@ public class TableServiceUnitTest extends AbstractUnitTest { .thenReturn(CONCEPT_1_ENTITY_DTO); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final TableColumn response = tableService.update(TABLE_1_COLUMNS.get(0), request); @@ -278,8 +296,14 @@ public class TableServiceUnitTest extends AbstractUnitTest { .createTable(eq(DATABASE_1_ID), any(TableCreateDto.class)); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final Table response = tableService.createTable(DATABASE_1, TABLE_3_CREATE_DTO, USER_1_PRINCIPAL); @@ -315,8 +339,14 @@ public class TableServiceUnitTest extends AbstractUnitTest { .createTable(eq(DATABASE_1_ID), any(TableCreateDto.class)); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final Table response = tableService.createTable(DATABASE_1, request, USER_1_PRINCIPAL); @@ -368,8 +398,14 @@ public class TableServiceUnitTest extends AbstractUnitTest { .createTable(eq(DATABASE_1_ID), any(TableCreateDto.class)); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ assertThrows(MalformedException.class, () -> { @@ -391,8 +427,14 @@ public class TableServiceUnitTest extends AbstractUnitTest { doNothing() .when(dataServiceGateway) .createTable(DATABASE_1_ID, TABLE_3_CREATE_DTO); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final Table response = tableService.createTable(DATABASE_1, TABLE_3_CREATE_DTO, USER_1_PRINCIPAL); @@ -412,8 +454,14 @@ public class TableServiceUnitTest extends AbstractUnitTest { doThrow(DataServiceException.class) .when(dataServiceGateway) .createTable(DATABASE_1_ID, TABLE_5_CREATE_DTO); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ assertThrows(DataServiceException.class, () -> { @@ -510,8 +558,14 @@ public class TableServiceUnitTest extends AbstractUnitTest { doNothing() .when(dataServiceGateway) .deleteTable(DATABASE_1_ID, TABLE_1_ID); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ tableService.deleteTable(TABLE_1); @@ -526,8 +580,14 @@ public class TableServiceUnitTest extends AbstractUnitTest { doNothing() .when(dataServiceGateway) .deleteTable(DATABASE_1_ID, TABLE_4_ID); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ tableService.deleteTable(TABLE_4); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java index 8ca002472a085a58ea5ee58fff8a2a0614c94fd9..c4c8b8bd8c944b8d4769c30250d59e73cf6a858e 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java @@ -88,8 +88,14 @@ public class ViewServicePersistenceTest extends AbstractUnitTest { doNothing() .when(dataServiceGateway) .deleteView(DATABASE_1_ID, VIEW_1_ID); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ viewService.delete(VIEW_1); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceUnitTest.java index cd9fe03c655d33b014239af4f05f0f0ae9b6d1e9..44a0a78d9e17528616173794613edc6f49b3807f 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceUnitTest.java @@ -61,8 +61,14 @@ public class ViewServiceUnitTest extends AbstractUnitTest { .thenReturn(VIEW_1_DTO); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ final View response = viewService.create(DATABASE_1, USER_1, request); @@ -116,8 +122,14 @@ public class ViewServiceUnitTest extends AbstractUnitTest { .deleteView(DATABASE_1_ID, VIEW_1_ID); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); +<<<<<<< Updated upstream when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); +======= + doNothing() + .when(searchServiceGateway) + .update(any(Database.class)); +>>>>>>> Stashed changes /* test */ viewService.delete(VIEW_1); diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java index 0bcace730e7753b1dd21d2e1d4a91f47bda6b9f3..1559281af3462181248e492b5facb2bc89429388 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java @@ -1,15 +1,27 @@ package at.tuwien.config; +import at.tuwien.api.keycloak.TokenDto; import at.tuwien.auth.InternalRequestInterceptor; +import at.tuwien.exception.AccountNotSetupException; +import at.tuwien.exception.AuthServiceConnectionException; +import at.tuwien.exception.CredentialsInvalidException; import at.tuwien.gateway.KeycloakGateway; import lombok.Getter; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; import org.springframework.web.client.RestTemplate; +import org.springframework.web.reactive.function.client.ExchangeFilterFunction; +import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.util.DefaultUriBuilderFactory; +import java.util.List; + @Log4j2 @Getter @Configuration @@ -89,4 +101,27 @@ public class GatewayConfig { return restTemplate; } + @Bean + public WebClient webClient() { + return WebClient.builder() + .baseUrl(searchEndpoint) + .filter(internalFilter()) + .build(); + } + + private ExchangeFilterFunction internalFilter() { + return (request, next) -> { + final HttpHeaders headers = request.headers(); + headers.setAccept(List.of(MediaType.APPLICATION_JSON)); + try { + final TokenDto token = keycloakGateway.obtainUserToken(getSystemUsername(), getSystemPassword()); + headers.setBearerAuth(token.getAccessToken()); + return next.exchange(request); + } catch (AuthServiceConnectionException | CredentialsInvalidException | AccountNotSetupException e) { + log.error("Failed to obtain token for internal user: {}", e.getMessage()); + } + return next.exchange(request); + }; + } + } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/SearchServiceGateway.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/SearchServiceGateway.java index f5e2f49c02023fe9145f137089e4550c9ae5b769..16a6c731b1907eddbbed22fd5f43ddd556659ee5 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/SearchServiceGateway.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/SearchServiceGateway.java @@ -1,12 +1,21 @@ package at.tuwien.gateway; +<<<<<<< Updated upstream import at.tuwien.api.database.DatabaseDto; +======= +>>>>>>> Stashed changes import at.tuwien.entities.database.Database; -import at.tuwien.exception.*; +import at.tuwien.exception.DatabaseNotFoundException; +import at.tuwien.exception.SearchServiceConnectionException; +import at.tuwien.exception.SearchServiceException; public interface SearchServiceGateway { +<<<<<<< Updated upstream DatabaseDto update(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException; +======= + void update(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException; +>>>>>>> Stashed changes void delete(Long databaseId) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/SearchServiceGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/SearchServiceGatewayImpl.java index 0f14b8d34826fe94829146f53a0cc22fb9e97333..729ffb305719bd174105e68131ea1c91bc048af7 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/SearchServiceGatewayImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/SearchServiceGatewayImpl.java @@ -13,29 +13,39 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.http.*; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.HttpServerErrorException; import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestTemplate; +import org.springframework.web.reactive.function.client.WebClient; @Log4j2 @Service public class SearchServiceGatewayImpl implements SearchServiceGateway { + private final WebClient webClient; private final RestTemplate restTemplate; private final GatewayConfig gatewayConfig; private final MetadataMapper metadataMapper; @Autowired - public SearchServiceGatewayImpl(@Qualifier("searchServiceRestTemplate") RestTemplate restTemplate, + public SearchServiceGatewayImpl(WebClient webClient, @Qualifier("searchServiceRestTemplate") RestTemplate restTemplate, GatewayConfig gatewayConfig, MetadataMapper metadataMapper) { + this.webClient = webClient; this.restTemplate = restTemplate; this.gatewayConfig = gatewayConfig; this.metadataMapper = metadataMapper; } @Override +<<<<<<< Updated upstream public DatabaseDto update(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException { +======= + @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW) + public void update(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException { +>>>>>>> Stashed changes final ResponseEntity<DatabaseDto> response; final HttpHeaders headers = new HttpHeaders(); headers.set("Accept", "application/json"); @@ -44,7 +54,11 @@ public class SearchServiceGatewayImpl implements SearchServiceGateway { log.trace("update database at endpoint {} with path {}", gatewayConfig.getSearchEndpoint(), path); try { response = restTemplate.exchange(path, HttpMethod.PUT, new HttpEntity<>( +<<<<<<< Updated upstream metadataMapper.databaseToPrivilegedDatabaseDto(database), headers), DatabaseDto.class); +======= + metadataMapper.databaseToDatabaseDto(database), headers), DatabaseDto.class); +>>>>>>> Stashed changes } catch (ResourceAccessException | HttpServerErrorException.ServiceUnavailable | HttpServerErrorException.InternalServerError e) { log.error("Failed to update database: {}", e.getMessage()); @@ -60,7 +74,6 @@ public class SearchServiceGatewayImpl implements SearchServiceGateway { log.error("Failed to update database: response code is not 202"); throw new SearchServiceException("Failed to update database: response code is not 202"); } - return response.getBody(); } @Override diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java index 52a9a63667c8faa22bdd142d5161f04e85d70513..3d71e52b0dce52819d721ef2091044f32d663759 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java @@ -3,8 +3,12 @@ package at.tuwien.service.impl; import at.tuwien.api.database.table.TableCreateDto; import at.tuwien.api.database.table.TableStatisticDto; import at.tuwien.api.database.table.TableUpdateDto; +<<<<<<< Updated upstream import at.tuwien.api.database.table.columns.ColumnCreateDto; +======= +>>>>>>> Stashed changes import at.tuwien.api.database.table.columns.ColumnStatisticDto; +import at.tuwien.api.database.table.columns.CreateTableColumnDto; import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; import at.tuwien.config.RabbitConfig; import at.tuwien.entities.database.Database; @@ -22,6 +26,7 @@ import at.tuwien.service.*; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.security.Principal; @@ -89,11 +94,15 @@ public class TableServiceImpl implements TableService { } @Override +<<<<<<< Updated upstream @Transactional public Table createTable(Database database, TableCreateDto data, Principal principal) throws DataServiceException, +======= + @Transactional(propagation = Propagation.REQUIRED) + public Table createTable(Database database, CreateTableDto data, Principal principal) throws DataServiceException, +>>>>>>> Stashed changes DataServiceConnectionException, UserNotFoundException, TableNotFoundException, DatabaseNotFoundException, - TableExistsException, SearchServiceException, SearchServiceConnectionException, MalformedException, - OntologyNotFoundException, SemanticEntityNotFoundException { + TableExistsException, MalformedException, OntologyNotFoundException, SemanticEntityNotFoundException { final User owner = userService.findByUsername(principal.getName()); /* map table */ final Table table = Table.builder() @@ -279,9 +288,8 @@ public class TableServiceImpl implements TableService { @Override @Transactional - public void updateStatistics(Table table) throws SearchServiceException, - DatabaseNotFoundException, SearchServiceConnectionException, MalformedException, TableNotFoundException, - DataServiceException, DataServiceConnectionException { + public void updateStatistics(Table table) throws MalformedException, TableNotFoundException, DataServiceException, + DataServiceConnectionException, DatabaseNotFoundException { final TableStatisticDto statistic = dataServiceGateway.getTableStatistics(table.getTdbid(), table.getId()); if (statistic == null) { return; @@ -312,7 +320,6 @@ public class TableServiceImpl implements TableService { /* update in open search service */ searchServiceGateway.update(database); log.info("Updated statistics for the table and {} column(s)", table.getColumns().size()); - log.trace("updated statistics: {}", table); } } diff --git a/dbrepo-search-service/Pipfile.lock b/dbrepo-search-service/Pipfile.lock index 4d0035b92e9dcc745bdb1f20df690e9ea2c1be59..87765c3221e7ecdcd90bbcedc430b09ae7edbcdc 100644 --- a/dbrepo-search-service/Pipfile.lock +++ b/dbrepo-search-service/Pipfile.lock @@ -1,7 +1,11 @@ { "_meta": { "hash": { +<<<<<<< Updated upstream "sha256": "a0682b0583cfc91d643a307a7dce7a524e7f7c29dbf2c9c5e9a6f16eb5f5ee91" +======= + "sha256": "2ff9fc673f1fb1e5dc272aa711f4e730088fa0188b44449db042abf99b6c4db7" +>>>>>>> Stashed changes }, "pipfile-spec": 6, "requires": { @@ -360,11 +364,17 @@ }, "dbrepo": { "hashes": [ +<<<<<<< Updated upstream "sha256:1495b7efa016d75a2f978cf20aa1729d8dee2809583f2c253264f7fd3233addb", "sha256:839a4f5810d83e93b1fa88c7ab7641727b65af1d0eada93195d3f0daa3e13e5a" ], "markers": "python_version >= '3.11'", "path": "./lib/dbrepo-1.6.1.tar.gz" +======= + "sha256:7f98329f08d1da6fe45da8130cfb3ebd6e947a4101d46f92b31d7204b29a153d" + ], + "path": "./lib/dbrepo-1.6.3.tar.gz" +>>>>>>> Stashed changes }, "docker": { "hashes": [ diff --git a/dbrepo-ui/composables/table-service.ts b/dbrepo-ui/composables/table-service.ts index ca757c7451d70c4bd1fffc36b72c6a23d7fdde58..15a004f11aac6007ad6d12bd4c2b477ed128d78a 100644 --- a/dbrepo-ui/composables/table-service.ts +++ b/dbrepo-ui/composables/table-service.ts @@ -251,13 +251,6 @@ export const useTableService = (): any => { } } - function isOwner(table: TableDto, user: UserDto) { - if (!table || !user) { - return false - } - return table.owner.id === user.id - } - function tableNameToInternalName(name: string) { return name.normalize('NFKD') .toLowerCase() @@ -293,7 +286,6 @@ export const useTableService = (): any => { suggest, prepareColumns, prepareConstraints, - isOwner, tableNameToInternalName } } diff --git a/dbrepo-ui/pages/database/[database_id]/info.vue b/dbrepo-ui/pages/database/[database_id]/info.vue index 02c2c8310ae9bafe8ce458decf6ccdd86a6cba37..56973289bd9811b46b858b9e2c322cf40b911dd7 100644 --- a/dbrepo-ui/pages/database/[database_id]/info.vue +++ b/dbrepo-ui/pages/database/[database_id]/info.vue @@ -94,7 +94,7 @@ <div> <UserBadge :user="database.owner" - :other-user="user" /> + :other-user="cacheUser" /> </div> </v-list-item> <v-list-item @@ -104,7 +104,7 @@ <div> <UserBadge :user="database.contact" - :other-user="user" /> + :other-user="cacheUser" /> </div> </v-list-item> </v-list> diff --git a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/import.vue b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/import.vue index 9da3e1c9fd9774ca61be0be90af9a7050d6fba3c..32862334e8718ab82e64e20ce6e05b1440f8e020 100644 --- a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/import.vue +++ b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/import.vue @@ -83,6 +83,9 @@ export default { table () { return this.cacheStore.getTable }, + access () { + return this.cacheStore.getAccess + }, title () { if (!this.table) { return this.$t('pages.table.import.title') diff --git a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/info.vue b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/info.vue index 8108e0677e040b5ce500b188e64857398a9c3cb6..bc4a1dcef7d48e0b2d8675a1d762c33e6048e0f4 100644 --- a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/info.vue +++ b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/info.vue @@ -116,6 +116,8 @@ </v-card> <v-breadcrumbs :items="items" class="pa-0 mt-2" /> </div> + <pre>table={{ table }}</pre> + <pre>access={{ access }}</pre> </template> <script> @@ -185,14 +187,22 @@ export default { roles () { return this.userStore.getRoles }, + access () { + return this.cacheStore.getAccess + }, canRead () { - if (this.database && this.database.is_public) { + if (!this.database || !this.access || this.database.is_public) { return true } +<<<<<<< Updated upstream if (!this.user || !this.access) { return false } return this.access.type === 'read' || this.access.type === 'write_own' || this.access.type === 'write_all' +======= + const userService = useUserService() + return userService.hasReadAccess(this.access) +>>>>>>> Stashed changes }, canViewSchema () { if (this.error) { @@ -215,9 +225,12 @@ export default { } return (this.access.type === 'write_own' && this.table.owned_by === this.user.id) || this.access.type === 'write_all' }, +<<<<<<< Updated upstream access () { return this.userStore.getAccess }, +======= +>>>>>>> Stashed changes hasDescription () { return this.table && this.table.description }, diff --git a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/settings.vue b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/settings.vue index 201917c5c051ffd63028fdb7f6f631e9b0dafce7..44c8b25bfc48df301aee4d348cb768087edd4f4e 100644 --- a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/settings.vue +++ b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/settings.vue @@ -229,8 +229,12 @@ export default { if (this.roles.includes('delete-foreign-table')) { return true } +<<<<<<< Updated upstream const tableService = useTableService() return tableService.isOwner(this.table, this.user) && this.roles.includes('delete-table') && this.table.identifiers.length === 0 +======= + return this.table.owner.id === this.cacheUser.uid && this.roles.includes('delete-table') && this.table.identifiers.length === 0 +>>>>>>> Stashed changes }, inputVariant () { const runtimeConfig = useRuntimeConfig() diff --git a/dbrepo-ui/pages/database/[database_id]/view/create.vue b/dbrepo-ui/pages/database/[database_id]/view/create.vue index 060d186252e1192b3264af89b92b85293ad14d09..80cb16e5495c40914d28f258c36f57f3c57934bf 100644 --- a/dbrepo-ui/pages/database/[database_id]/view/create.vue +++ b/dbrepo-ui/pages/database/[database_id]/view/create.vue @@ -1,14 +1,19 @@ <template> <div v-if="canCreateView"> - <Builder mode="view" /> + <Builder + mode="view" /> <v-breadcrumbs :items="items" class="pa-0 mt-2" /> </div> </template> <script> import Builder from '@/components/subset/Builder.vue' +<<<<<<< Updated upstream import { useUserStore } from '@/stores/user' +======= +import { useCacheStore } from '@/stores/cache.js' +>>>>>>> Stashed changes export default { components: { @@ -35,7 +40,11 @@ export default { disabled: true } ], +<<<<<<< Updated upstream userStore: useUserStore() +======= + cacheStore: useCacheStore() +>>>>>>> Stashed changes } }, computed: { @@ -46,7 +55,7 @@ export default { return this.userStore.getRoles }, canCreateView () { - if (!this.roles) { + if (!this.roles || !this.access) { return false } return this.roles.includes('create-database-view') diff --git a/dbrepo-ui/pages/database/[database_id]/view/index.vue b/dbrepo-ui/pages/database/[database_id]/view/index.vue index 4172797328151393813f683200652c2753e783ed..c7acfd024c3a00a30872f779640ffebca557f07f 100644 --- a/dbrepo-ui/pages/database/[database_id]/view/index.vue +++ b/dbrepo-ui/pages/database/[database_id]/view/index.vue @@ -1,6 +1,6 @@ <template> <div - v-if="canViewSchema"> + v-if="canViewViews"> <DatabaseToolbar /> <v-window v-model="tab"> @@ -48,11 +48,29 @@ export default { database () { return this.cacheStore.getDatabase }, +<<<<<<< Updated upstream canViewSchema () { if (this.error) { return false } return this.database +======= + access () { + return this.cacheStore.getAccess + }, + canViewViews () { + if (!this.database) { + return false + } + if (this.database.is_schema_public || this.database.is_public) { + return true + } + if (!this.access) { + return false + } + const userService = useUserService() + return userService.hasReadAccess(this.access) +>>>>>>> Stashed changes } } } diff --git a/dbrepo-ui/pages/user/index.vue b/dbrepo-ui/pages/user/index.vue index e729d9086f2be6604c2b9d0222c00acc79297f85..d53b2f42cc8bd7966db208242ad0a8b1736b3428 100644 --- a/dbrepo-ui/pages/user/index.vue +++ b/dbrepo-ui/pages/user/index.vue @@ -2,6 +2,9 @@ <div /> </template> +<script setup> +const { loggedIn } = useOidcAuth() +</script> <script> import { useUserStore } from '@/stores/user' diff --git a/docker-compose.yml b/docker-compose.yml index 1a9da923ae36e08ac9354b264b2ed037ba2d67f3..9eee227dd971a0540b858928a796680bed8e86ce 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,8 +19,6 @@ services: - metadata-db-data:/bitnami/mariadb - ./dbrepo-metadata-db/1_setup-schema.sql:/docker-entrypoint-initdb.d/1_setup-schema.sql - ./dbrepo-metadata-db/2_setup-data.sql:/docker-entrypoint-initdb.d/2_setup-data.sql - ports: - - "3306:3306" environment: MARIADB_DATABASE: "${METADATA_DB:-dbrepo}" MARIADB_ROOT_PASSWORD: "${METADATA_DB_PASSWORD:-dbrepo}" @@ -141,7 +139,7 @@ services: context: ./dbrepo-metadata-service network: host ports: - - "9099:8080" + - "9099:18080" volumes: - "${SHARED_VOLUME:-/tmp}:/tmp" environment: diff --git a/helm/dbrepo/files/create-event-listener.jar b/helm/dbrepo/files/create-event-listener.jar new file mode 100644 index 0000000000000000000000000000000000000000..221bdd325f056ff953e0a44a46773470eb08e91e Binary files /dev/null and b/helm/dbrepo/files/create-event-listener.jar differ diff --git a/helm/dbrepo/templates/auth-configmap.yaml b/helm/dbrepo/templates/auth-configmap.yaml index 9a237767cce39c2b3ad2cdb9c307f858ae158224..55355c2262049fa7c57633c0aac4b0839916c79f 100644 --- a/helm/dbrepo/templates/auth-configmap.yaml +++ b/helm/dbrepo/templates/auth-configmap.yaml @@ -4,6 +4,9 @@ kind: ConfigMap metadata: name: auth-service-config namespace: {{ include "common.names.namespace" . | quote }} +binaryData: + create-event-listener.jar: | + {{ .Files.Get "files/create-event-listener.jar" | b64enc | nindent 4 }} data: KC_HOSTNAME_PATH: "/" KC_HOSTNAME_ADMIN_URL: "{{ .Values.gateway }}/" diff --git a/helm/dbrepo/values.yaml b/helm/dbrepo/values.yaml index 4d9376c06ea315e13a615477b4b618cbe1e5afad..2c60cd27bd4ba964e7cfd98e1ef4f66f260bbd03 100644 --- a/helm/dbrepo/values.yaml +++ b/helm/dbrepo/values.yaml @@ -133,7 +133,20 @@ authservice: ## @skip authservice.extraVolumeMounts extraVolumeMounts: - name: config-map +<<<<<<< Updated upstream mountPath: /opt/bitnami/keycloak/data/import +======= + mountPath: /opt/keycloak/data/import/dbrepo-realm.json + subPath: dbrepo-realm.json + - name: config-map + mountPath: /opt/keycloak/data/import/master-realm.json + subPath: master-realm.json + - name: config-map + mountPath: /opt/bitnami/keycloak/providers/create-event-listener.jar + subPath: create-event-listener.jar + - name: cache + mountPath: /bitnami/keycloak/ +>>>>>>> Stashed changes ## @skip authservice.replicaCount The number of replicas. replicaCount: 2 @@ -167,6 +180,16 @@ datadb: enabled: true ## @param datadb.replicaCount The number of cluster nodes, should be uneven i.e. 2n+1 replicaCount: 3 + resources: + resources: + limits: + cpu: 750m + ephemeral-storage: 2Gi + memory: 1536Mi + requests: + cpu: 500m + ephemeral-storage: 50Mi + memory: 1000Mi persistence: ## @param datadb.persistence.enabled Enable persistent storage. enabled: true diff --git a/make/dev.mk b/make/dev.mk index 0282dbbce287356e207822fdc9dbf1be7e26e0b8..c20b4dd22910b76e02979fb9be710ea4e67cd565 100644 --- a/make/dev.mk +++ b/make/dev.mk @@ -31,6 +31,7 @@ package-config: ## Package the config files cp ./dbrepo-metric-db/prometheus.yml ./.docker/config cp ./dbrepo-storage-service/s3_config.json ./.docker/config cp ./dbrepo-upload-service/pre-create.sh ./.docker/config + cp ./dbrepo-auth-service/listeners/target/create-event-listener.jar ./.docker/config cd ./.docker && tar czf ./dist.tar.gz ./docker-compose.yml ./.env ./config .PHONY: install-staging