From f66a70f32684bf30b4dc4b2b69f51e23cc30b342 Mon Sep 17 00:00:00 2001 From: Martin Weise <martin.weise@tuwien.ac.at> Date: Mon, 28 Nov 2022 20:02:06 +0100 Subject: [PATCH] Added 1:1 relationship --- .../tuwien/auth/PermissionEvaluatorImpl.java | 2 +- .../at/tuwien/mapper/ContainerMapper.java | 2 +- .../at/tuwien/mapper/ContainerMapper.java | 2 +- .../service/impl/MariaDbServiceImpl.java | 2 +- .../at/tuwien/api/container/ContainerDto.java | 4 ++-- .../tuwien/entities/container/Container.java | 10 ++++++--- .../container/image/ContainerImage.java | 2 +- .../container/image/ContainerImageDate.java | 2 +- .../image/ContainerImageEnvironmentItem.java | 2 +- .../at/tuwien/entities/database/Database.java | 5 +++-- .../at/tuwien/entities/database/View.java | 2 +- .../tuwien/entities/database/table/Table.java | 3 +-- .../database/table/columns/TableColumn.java | 2 +- .../table/columns/concepts/Concept.java | 2 +- .../tuwien/entities/identifier/Creator.java | 2 +- .../at/tuwien/entities/user/TimeSecret.java | 2 +- .../service/TableServiceIntegrationTest.java | 22 +++++++++++-------- .../jpa/ImageEnvironmentRepository.java | 11 ++++++++++ 18 files changed, 49 insertions(+), 30 deletions(-) create mode 100644 fda-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java diff --git a/fda-container-service/services/src/main/java/at/tuwien/auth/PermissionEvaluatorImpl.java b/fda-container-service/services/src/main/java/at/tuwien/auth/PermissionEvaluatorImpl.java index 0bfbb375cf..987774756e 100644 --- a/fda-container-service/services/src/main/java/at/tuwien/auth/PermissionEvaluatorImpl.java +++ b/fda-container-service/services/src/main/java/at/tuwien/auth/PermissionEvaluatorImpl.java @@ -56,7 +56,7 @@ public class PermissionEvaluatorImpl implements PermissionEvaluator { log.error("Failed to grant permission {}", permission); log.debug("failed to grant permission {}, owner is not the current user", permission); return false; - } else if (container.getDatabases().size() > 0) { + } else if (container.getDatabase() != null) { log.error("Failed to grant permission {}", permission); log.debug("failed to grant permission {}, databases present in the container", permission); return false; diff --git a/fda-container-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java b/fda-container-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java index 6c3992111d..57104de012 100644 --- a/fda-container-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java +++ b/fda-container-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java @@ -38,7 +38,7 @@ public interface ContainerMapper { @Mapping(source = "state", target = "state", qualifiedByName = "containerStateDto"), @Mapping(source = "id", target = "hash"), @Mapping(target = "id", ignore = true), - @Mapping(target = "databases", ignore = true), + @Mapping(target = "database", ignore = true), }) ContainerDto inspectContainerResponseToContainerDto(InspectContainerResponse data); diff --git a/fda-database-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java b/fda-database-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java index d48096e7d0..b425a856b7 100644 --- a/fda-database-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java +++ b/fda-database-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java @@ -11,7 +11,7 @@ public interface ContainerMapper { @Mappings({ @Mapping(target = "id", source = "id"), - @Mapping(target = "databases", source = "databases", ignore = true), + @Mapping(target = "database", source = "database", ignore = true), }) ContainerDto containerToContainerDto(Container data); diff --git a/fda-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java b/fda-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java index 2bf9fc672e..901fd7c3a6 100644 --- a/fda-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java +++ b/fda-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java @@ -124,7 +124,7 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe DatabaseMalformedException, AmqpException, ContainerConnectionException, UserNotFoundException, DatabaseNameExistsException, DatabaseConnectionException, QueryMalformedException { final Container container = containerService.find(containerId); - if (container.getDatabases().size() != 0) { + if (container.getDatabase() != null) { log.error("Currently we only support one database per container."); throw new DatabaseMalformedException("Currently only one database per container is supported"); } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java index fef1d04e42..cf9b72db85 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java @@ -42,9 +42,9 @@ public class ContainerDto { @Schema(example = "running") private ContainerStateDto state; - @ToString.Exclude @Schema - private List<DatabaseDto> databases; + @ToString.Exclude + private DatabaseDto database; @JsonProperty("ip_address") private String ipAddress; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java index 639213fb30..22894af699 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java @@ -53,15 +53,19 @@ public class Container { @Column private Integer port; + @ToString.Exclude @org.springframework.data.annotation.Transient - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @OneToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false) }) - private List<Database> databases; + private Database database; @org.springframework.data.annotation.Transient - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumns({ + @JoinColumn(name = "image_id", referencedColumnName = "id", insertable = false, updatable = false) + }) private ContainerImage image; @Column diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java index 084966a15e..3253c44e85 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java @@ -64,7 +64,7 @@ public class ContainerImage { @ToString.Exclude @org.springframework.data.annotation.Transient - @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.DETACH, CascadeType.MERGE}, mappedBy = "image") + @OneToMany(fetch = FetchType.LAZY, mappedBy = "image") private List<Container> containers; @Column(nullable = false, updatable = false) diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java index 94079ae737..bf2608fa41 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java @@ -30,7 +30,7 @@ public class ContainerImageDate { @org.springframework.data.annotation.Transient @ToString.Exclude - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "iid", insertable = false, updatable = false) private ContainerImage image; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java index 3bc8bf68aa..8aa33c9c62 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java @@ -42,7 +42,7 @@ public class ContainerImageEnvironmentItem { @ToString.Exclude @org.springframework.data.annotation.Transient - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "iid", referencedColumnName = "id", insertable = false, updatable = false) }) diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java index 2bd23359fe..3e6ad2ba8b 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java @@ -42,9 +42,9 @@ public class Database { }) private User creator; - @org.springframework.data.annotation.Transient @ToString.Exclude - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @org.springframework.data.annotation.Transient + @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false) }) @@ -68,6 +68,7 @@ public class Database { }) private User contact; + @org.springframework.data.annotation.Transient @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @JoinColumns({ @JoinColumn(name = "tdbid", referencedColumnName = "id", insertable = false, updatable = false) diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java index 8355800a85..4dfc6e4df9 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java @@ -42,7 +42,7 @@ public class View { private User creator; @org.springframework.data.annotation.Transient - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "vdbid", insertable = false, updatable = false) private Database database; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java index c2622873d5..65ec9e82e4 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java @@ -58,8 +58,7 @@ public class Table { private String description; @org.springframework.data.annotation.Transient - @ToString.Exclude - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "tdbid", insertable = false, updatable = false) private Database database; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java index d88409c754..91c0f05df0 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java @@ -54,7 +54,7 @@ public class TableColumn implements Comparable<TableColumn> { @org.springframework.data.annotation.Transient @ToString.Exclude - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "tid", referencedColumnName = "id", insertable = false, updatable = false), @JoinColumn(name = "cdbid", referencedColumnName = "tdbid", insertable = false, updatable = false) diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java index d60ae1e378..9d1777496c 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java @@ -35,7 +35,7 @@ public class Concept { @org.springframework.data.annotation.Transient @ToString.Exclude - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @OneToMany(fetch = FetchType.LAZY) @JoinTable(name = "mdb_columns_concepts", joinColumns = @JoinColumn(name = "concept_id", referencedColumnName = "id", insertable = false, updatable = false), inverseJoinColumns = { diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java index 2458b10c1a..6fea41a426 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java @@ -42,7 +42,7 @@ public class Creator { @org.springframework.data.annotation.Transient @ToString.Exclude - @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pid", referencedColumnName = "id", insertable = false, updatable = false) private Identifier identifier; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/user/TimeSecret.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/user/TimeSecret.java index e9d00759a1..dab6e3c3a4 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/user/TimeSecret.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/user/TimeSecret.java @@ -39,7 +39,7 @@ public class TimeSecret { @org.springframework.data.annotation.Transient @ToString.Exclude - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "uid", referencedColumnName = "userid", insertable = false, updatable = false) }) diff --git a/fda-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java b/fda-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java index abbc84317d..7157c6f436 100644 --- a/fda-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java +++ b/fda-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java @@ -4,6 +4,8 @@ import at.tuwien.BaseUnitTest; import at.tuwien.config.DockerConfig; import at.tuwien.config.IndexInitializer; import at.tuwien.config.ReadyConfig; +import at.tuwien.entities.container.Container; +import at.tuwien.entities.database.Database; import at.tuwien.entities.database.table.Table; import at.tuwien.exception.*; import at.tuwien.repository.jpa.*; @@ -22,10 +24,12 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; +import javax.transaction.Transactional; import java.io.File; import java.security.Principal; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import static at.tuwien.config.DockerConfig.dockerClient; import static at.tuwien.config.DockerConfig.hostConfig; @@ -64,6 +68,9 @@ public class TableServiceIntegrationTest extends BaseUnitTest { @Autowired private UserRepository userRepository; + @Autowired + private ImageEnvironmentRepository imageEnvironmentRepository; + @BeforeAll public static void beforeAll() throws InterruptedException { afterAll(); @@ -127,15 +134,12 @@ public class TableServiceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { - userRepository.save(USER_1); - userRepository.save(USER_2); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - containerRepository.save(CONTAINER_2); - databaseRepository.save(DATABASE_1) /* public */; - databaseRepository.save(DATABASE_2) /* private */; - tableRepository.save(TABLE_1); - tableRepository.save(TABLE_2); + CONTAINER_1.setDatabase(DATABASE_1); + CONTAINER_2.setDatabase(DATABASE_2); + TABLE_1.setDatabase(DATABASE_1); + TABLE_2.setDatabase(DATABASE_2); + tableRepository.save(TABLE_1) /* public */; + tableRepository.save(TABLE_2) /* private */; } @Test diff --git a/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java b/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java new file mode 100644 index 0000000000..c25e8577e2 --- /dev/null +++ b/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java @@ -0,0 +1,11 @@ +package at.tuwien.repository.jpa; + +import at.tuwien.entities.container.image.ContainerImage; +import at.tuwien.entities.container.image.ContainerImageEnvironmentItem; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ImageEnvironmentRepository extends JpaRepository<ContainerImageEnvironmentItem, Long> { + +} -- GitLab