diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/SearchServiceGatewayUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/SearchServiceGatewayUnitTest.java index b1ce21d4e5e8315b08087dc0d85712509a07973e..0fbe9be24351f7ecb6e27cc2c2a0e5375cb5a3ee 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/SearchServiceGatewayUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/SearchServiceGatewayUnitTest.java @@ -35,7 +35,7 @@ public class SearchServiceGatewayUnitTest extends AbstractUnitTest { private SearchServiceGateway searchServiceGateway; @Test - public void update_succeeds() throws DatabaseNotFoundException, SearchServiceException, + public void save_succeeds() throws DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException { final ResponseEntity<DatabaseDto> mock = ResponseEntity.accepted() .build(); @@ -45,11 +45,11 @@ public class SearchServiceGatewayUnitTest extends AbstractUnitTest { .thenReturn(mock); /* test */ - searchServiceGateway.update(DATABASE_1); + searchServiceGateway.save(DATABASE_1); } @Test - public void update_badRequest_fails() { + public void save_badRequest_fails() { final ResponseEntity<DatabaseDto> mock = ResponseEntity.status(HttpStatus.BAD_REQUEST) .build(); @@ -59,12 +59,12 @@ public class SearchServiceGatewayUnitTest extends AbstractUnitTest { /* test */ assertThrows(SearchServiceException.class, () -> { - searchServiceGateway.update(DATABASE_1); + searchServiceGateway.save(DATABASE_1); }); } @Test - public void update_unexpectedResponse_fails() { + public void save_unexpectedResponse_fails() { final ResponseEntity<DatabaseDto> mock = ResponseEntity.status(HttpStatus.OK) .build(); @@ -74,12 +74,12 @@ public class SearchServiceGatewayUnitTest extends AbstractUnitTest { /* test */ assertThrows(SearchServiceException.class, () -> { - searchServiceGateway.update(DATABASE_1); + searchServiceGateway.save(DATABASE_1); }); } @Test - public void update_unavailable_fails() { + public void save_unavailable_fails() { /* mock */ doThrow(HttpServerErrorException.ServiceUnavailable.class) @@ -88,12 +88,12 @@ public class SearchServiceGatewayUnitTest extends AbstractUnitTest { /* test */ assertThrows(SearchServiceConnectionException.class, () -> { - searchServiceGateway.update(DATABASE_1); + searchServiceGateway.save(DATABASE_1); }); } @Test - public void update_notFound_fails() { + public void save_notFound_fails() { /* mock */ doThrow(HttpClientErrorException.NotFound.class) @@ -102,7 +102,7 @@ public class SearchServiceGatewayUnitTest extends AbstractUnitTest { /* test */ assertThrows(DatabaseNotFoundException.class, () -> { - searchServiceGateway.update(DATABASE_1); + searchServiceGateway.save(DATABASE_1); }); } 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..01a990cef3bec4ae4997f44d854ef6df2c9be22d 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 @@ -1,20 +1,19 @@ package at.tuwien.service; +import at.tuwien.api.datacite.DataCiteBody; +import at.tuwien.api.datacite.doi.DataCiteDoi; import at.tuwien.api.identifier.BibliographyTypeDto; +import at.tuwien.entities.database.Database; import at.tuwien.entities.identifier.Creator; import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.identifier.IdentifierStatusType; import at.tuwien.entities.identifier.NameIdentifierSchemeType; +import at.tuwien.exception.*; import at.tuwien.repository.ContainerRepository; import at.tuwien.repository.DatabaseRepository; import at.tuwien.repository.LicenseRepository; import at.tuwien.repository.UserRepository; import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.datacite.DataCiteBody; -import at.tuwien.api.datacite.doi.DataCiteDoi; -import at.tuwien.entities.database.Database; -import at.tuwien.exception.*; -import at.tuwien.gateway.SearchServiceGateway; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -48,7 +47,7 @@ import static org.mockito.Mockito.when; public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { @MockBean - private SearchServiceGateway searchServiceGateway; + private SearchService searchService; @MockBean @Qualifier("dataCiteRestTemplate") @@ -140,7 +139,7 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { /* mock */ when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(dataCiteBodyParameterizedTypeReference))) .thenReturn(mock); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -155,7 +154,7 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { doThrow(HttpClientErrorException.BadRequest.class) .when(restTemplate) .exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(dataCiteBodyParameterizedTypeReference)); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -172,7 +171,7 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { doThrow(RestClientException.class) .when(restTemplate) .exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(dataCiteBodyParameterizedTypeReference)); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -331,7 +330,7 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { IdentifierNotFoundException, SearchServiceException, SearchServiceConnectionException { /* mock */ - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ 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..6cf8fa05702560a1e5e799b78588591167ce11bf 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 @@ -8,7 +8,6 @@ import at.tuwien.entities.database.table.Table; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; import at.tuwien.repository.DatabaseRepository; import at.tuwien.test.AbstractUnitTest; import lombok.extern.log4j.Log4j2; @@ -33,7 +32,7 @@ import static org.mockito.Mockito.*; public class DatabaseServiceUnitTest extends AbstractUnitTest { @MockBean - private SearchServiceGateway searchServiceGateway; + private SearchService searchService; @MockBean private DataServiceGateway dataServiceGateway; @@ -109,7 +108,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { /* mock */ when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -126,8 +125,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); doThrow(DatabaseNotFoundException.class) - .when(searchServiceGateway) - .update(any(Database.class)); + .when(searchService) + .save(any(Database.class)); /* test */ assertThrows(DatabaseNotFoundException.class, () -> { @@ -144,8 +143,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); doThrow(SearchServiceConnectionException.class) - .when(searchServiceGateway) - .update(any(Database.class)); + .when(searchService) + .save(any(Database.class)); /* test */ assertThrows(SearchServiceConnectionException.class, () -> { @@ -163,7 +162,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { .thenReturn(List.of()); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -182,8 +181,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); doThrow(SearchServiceConnectionException.class) - .when(searchServiceGateway) - .update(any(Database.class)); + .when(searchService) + .save(any(Database.class)); /* test */ assertThrows(SearchServiceConnectionException.class, () -> { @@ -202,8 +201,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); doThrow(DatabaseNotFoundException.class) - .when(searchServiceGateway) - .update(any(Database.class)); + .when(searchService) + .save(any(Database.class)); /* test */ assertThrows(DatabaseNotFoundException.class, () -> { @@ -221,7 +220,7 @@ 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); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -239,7 +238,7 @@ 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); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -257,7 +256,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { .thenReturn(List.of()); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -275,7 +274,7 @@ 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); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -293,7 +292,7 @@ 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); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -411,8 +410,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { /* mock */ doThrow(SearchServiceException.class) - .when(searchServiceGateway) - .update(DATABASE_1); + .when(searchService) + .save(DATABASE_1); /* test */ assertThrows(SearchServiceException.class, () -> { @@ -426,8 +425,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { /* mock */ doThrow(DatabaseNotFoundException.class) - .when(searchServiceGateway) - .update(DATABASE_1); + .when(searchService) + .save(DATABASE_1); /* test */ assertThrows(DatabaseNotFoundException.class, () -> { @@ -441,8 +440,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { /* mock */ doThrow(SearchServiceConnectionException.class) - .when(searchServiceGateway) - .update(DATABASE_1); + .when(searchService) + .save(DATABASE_1); /* test */ assertThrows(SearchServiceConnectionException.class, () -> { @@ -468,8 +467,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { /* mock */ doThrow(SearchServiceException.class) - .when(searchServiceGateway) - .update(DATABASE_1); + .when(searchService) + .save(DATABASE_1); /* test */ assertThrows(SearchServiceException.class, () -> { @@ -483,8 +482,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { /* mock */ doThrow(DatabaseNotFoundException.class) - .when(searchServiceGateway) - .update(DATABASE_1); + .when(searchService) + .save(DATABASE_1); /* test */ assertThrows(DatabaseNotFoundException.class, () -> { @@ -498,8 +497,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { /* mock */ doThrow(SearchServiceConnectionException.class) - .when(searchServiceGateway) - .update(DATABASE_1); + .when(searchService) + .save(DATABASE_1); /* test */ assertThrows(SearchServiceConnectionException.class, () -> { @@ -516,7 +515,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { ContainerNotFoundException, SearchServiceException, SearchServiceConnectionException { /* mock */ - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); 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..fd9eab3516951a303e795646b375a5af3abf476b 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 @@ -12,10 +12,8 @@ import at.tuwien.entities.database.Database; import at.tuwien.entities.identifier.*; import at.tuwien.exception.*; import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -47,7 +45,7 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { private DataServiceGateway dataServiceGateway; @MockBean - private SearchServiceGateway searchServiceGateway; + private SearchService searchService; @MockBean @Qualifier("restTemplate") @@ -175,7 +173,7 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { /* mock */ when(dataServiceGateway.findQuery(IDENTIFIER_5_DATABASE_ID, IDENTIFIER_5_QUERY_ID)) .thenReturn(QUERY_2_DTO); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_2_DTO); /* test */ @@ -285,7 +283,7 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { SearchServiceConnectionException { /* mock */ - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ 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..fe8ca04fe76519d4c970968ce4e4bfcedbfdb435 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 @@ -13,7 +13,6 @@ import at.tuwien.entities.database.table.constraints.primaryKey.PrimaryKey; import at.tuwien.entities.database.table.constraints.unique.Unique; import at.tuwien.exception.*; import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; import at.tuwien.repository.ContainerRepository; import at.tuwien.repository.DatabaseRepository; import at.tuwien.repository.LicenseRepository; @@ -45,7 +44,7 @@ import static org.mockito.Mockito.when; public class TableServicePersistenceTest extends AbstractUnitTest { @MockBean - private SearchServiceGateway searchServiceGateway; + private SearchService searchService; @MockBean private UserService userService; @@ -111,7 +110,7 @@ public class TableServicePersistenceTest extends AbstractUnitTest { doNothing() .when(dataServiceGateway) .createTable(DATABASE_1_ID, request); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ 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..83bdfa7e704dcc84e46f68879203993856ff489b 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 @@ -15,7 +15,6 @@ import at.tuwien.entities.database.table.columns.TableColumnType; import at.tuwien.entities.database.table.constraints.Constraints; import at.tuwien.exception.*; import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; import at.tuwien.repository.DatabaseRepository; import at.tuwien.test.AbstractUnitTest; import lombok.extern.log4j.Log4j2; @@ -45,7 +44,7 @@ public class TableServiceUnitTest extends AbstractUnitTest { private DatabaseRepository databaseRepository; @MockBean - private SearchServiceGateway searchServiceGateway; + private SearchService searchService; @MockBean private UserService userService; @@ -134,7 +133,7 @@ public class TableServiceUnitTest extends AbstractUnitTest { .thenReturn(TABLE_8_STATISTIC_DTO); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -152,8 +151,8 @@ public class TableServiceUnitTest extends AbstractUnitTest { when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); doThrow(DatabaseNotFoundException.class) - .when(searchServiceGateway) - .update(any(Database.class)); + .when(searchService) + .save(any(Database.class)); /* test */ assertThrows(DatabaseNotFoundException.class, () -> { @@ -172,8 +171,8 @@ public class TableServiceUnitTest extends AbstractUnitTest { when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); doThrow(SearchServiceConnectionException.class) - .when(searchServiceGateway) - .update(any(Database.class)); + .when(searchService) + .save(any(Database.class)); /* test */ assertThrows(SearchServiceConnectionException.class, () -> { @@ -223,7 +222,7 @@ public class TableServiceUnitTest extends AbstractUnitTest { .thenReturn(CONCEPT_1); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -255,7 +254,7 @@ public class TableServiceUnitTest extends AbstractUnitTest { .thenReturn(CONCEPT_1_ENTITY_DTO); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -278,7 +277,7 @@ public class TableServiceUnitTest extends AbstractUnitTest { .createTable(eq(DATABASE_1_ID), any(TableCreateDto.class)); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -315,7 +314,7 @@ public class TableServiceUnitTest extends AbstractUnitTest { .createTable(eq(DATABASE_1_ID), any(TableCreateDto.class)); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -368,7 +367,7 @@ public class TableServiceUnitTest extends AbstractUnitTest { .createTable(eq(DATABASE_1_ID), any(TableCreateDto.class)); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -391,7 +390,7 @@ public class TableServiceUnitTest extends AbstractUnitTest { doNothing() .when(dataServiceGateway) .createTable(DATABASE_1_ID, TABLE_3_CREATE_DTO); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -412,7 +411,7 @@ public class TableServiceUnitTest extends AbstractUnitTest { doThrow(DataServiceException.class) .when(dataServiceGateway) .createTable(DATABASE_1_ID, TABLE_5_CREATE_DTO); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -510,7 +509,7 @@ public class TableServiceUnitTest extends AbstractUnitTest { doNothing() .when(dataServiceGateway) .deleteTable(DATABASE_1_ID, TABLE_1_ID); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -526,7 +525,7 @@ public class TableServiceUnitTest extends AbstractUnitTest { doNothing() .when(dataServiceGateway) .deleteTable(DATABASE_1_ID, TABLE_4_ID); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ 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..a0b840b6218d769318dfc60cebd36fb329f0d637 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 @@ -2,10 +2,8 @@ package at.tuwien.service; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.View; -import at.tuwien.entities.database.ViewColumn; import at.tuwien.exception.*; import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; import at.tuwien.repository.ContainerRepository; import at.tuwien.repository.DatabaseRepository; import at.tuwien.repository.LicenseRepository; @@ -56,7 +54,7 @@ public class ViewServicePersistenceTest extends AbstractUnitTest { private DataServiceGateway dataServiceGateway; @MockBean - private SearchServiceGateway searchServiceGateway; + private SearchService searchService; @BeforeEach public void beforeEach() { @@ -88,7 +86,7 @@ public class ViewServicePersistenceTest extends AbstractUnitTest { doNothing() .when(dataServiceGateway) .deleteView(DATABASE_1_ID, VIEW_1_ID); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ 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..1a4e9359f383a4f12da160a51430fc25f6b17881 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 @@ -1,13 +1,12 @@ package at.tuwien.service; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.test.AbstractUnitTest; import at.tuwien.api.database.ViewCreateDto; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.View; import at.tuwien.exception.*; import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; +import at.tuwien.repository.DatabaseRepository; +import at.tuwien.test.AbstractUnitTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -18,7 +17,6 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.testcontainers.junit.jupiter.Testcontainers; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; @@ -34,7 +32,7 @@ public class ViewServiceUnitTest extends AbstractUnitTest { private DataServiceGateway dataServiceGateway; @MockBean - private SearchServiceGateway searchServiceGateway; + private SearchService searchService; @MockBean private DatabaseRepository databaseRepository; @@ -61,7 +59,7 @@ public class ViewServiceUnitTest extends AbstractUnitTest { .thenReturn(VIEW_1_DTO); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -116,7 +114,7 @@ public class ViewServiceUnitTest extends AbstractUnitTest { .deleteView(DATABASE_1_ID, VIEW_1_ID); when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); - when(searchServiceGateway.update(any(Database.class))) + when(searchService.save(any(Database.class))) .thenReturn(DATABASE_1_DTO); /* test */ @@ -164,8 +162,8 @@ public class ViewServiceUnitTest extends AbstractUnitTest { when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); doThrow(SearchServiceException.class) - .when(searchServiceGateway) - .update(any(Database.class)); + .when(searchService) + .save(any(Database.class)); /* test */ assertThrows(SearchServiceException.class, () -> { @@ -184,8 +182,8 @@ public class ViewServiceUnitTest extends AbstractUnitTest { when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); doThrow(SearchServiceConnectionException.class) - .when(searchServiceGateway) - .update(any(Database.class)); + .when(searchService) + .save(any(Database.class)); /* test */ assertThrows(SearchServiceConnectionException.class, () -> { @@ -204,8 +202,8 @@ public class ViewServiceUnitTest extends AbstractUnitTest { when(databaseRepository.save(any(Database.class))) .thenReturn(DATABASE_1); doThrow(DatabaseNotFoundException.class) - .when(searchServiceGateway) - .update(any(Database.class)); + .when(searchService) + .save(any(Database.class)); /* test */ assertThrows(DatabaseNotFoundException.class, () -> { 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..08a106e545bff218acf88d68e7f75a5b6a3ca3c7 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 @@ -6,7 +6,7 @@ import at.tuwien.exception.*; public interface SearchServiceGateway { - DatabaseDto update(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException; + DatabaseDto save(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException; 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..d44df25a9205085e0787cbce2c5dc437002fb082 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 @@ -35,7 +35,7 @@ public class SearchServiceGatewayImpl implements SearchServiceGateway { } @Override - public DatabaseDto update(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException { + public DatabaseDto save(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException { final ResponseEntity<DatabaseDto> response; final HttpHeaders headers = new HttpHeaders(); headers.set("Accept", "application/json"); diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/SearchService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/SearchService.java new file mode 100644 index 0000000000000000000000000000000000000000..004df5d99da169a7edf718a6ee1aee546f8d8827 --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/SearchService.java @@ -0,0 +1,16 @@ +package at.tuwien.service; + +import at.tuwien.api.database.DatabaseDto; +import at.tuwien.entities.database.Database; +import at.tuwien.exception.DatabaseNotFoundException; +import at.tuwien.exception.SearchServiceConnectionException; +import at.tuwien.exception.SearchServiceException; + +public interface SearchService { + + DatabaseDto save(Database database) throws SearchServiceException, DatabaseNotFoundException, + SearchServiceConnectionException; + + void delete(Long databaseId) throws SearchServiceException, DatabaseNotFoundException, + SearchServiceConnectionException; +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java index 1c302c206871234da50f2cc9de234d7c94a84d66..b4d36edf91630b652eda1c02d7cc748224a09668 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java @@ -6,11 +6,11 @@ import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; import at.tuwien.mapper.MetadataMapper; import at.tuwien.repository.DatabaseRepository; import at.tuwien.service.AccessService; import at.tuwien.service.DatabaseService; +import at.tuwien.service.SearchService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,21 +23,21 @@ import java.util.Optional; @Service public class AccessServiceImpl implements AccessService { + private final SearchService searchService; private final MetadataMapper metadataMapper; private final DatabaseService databaseService; private final DatabaseRepository databaseRepository; private final DataServiceGateway dataServiceGateway; - private final SearchServiceGateway searchServiceGateway; @Autowired - public AccessServiceImpl(MetadataMapper metadataMapper, DatabaseService databaseService, - DatabaseRepository databaseRepository, DataServiceGateway dataServiceGateway, - SearchServiceGateway searchServiceGateway) { + public AccessServiceImpl(SearchService searchService, MetadataMapper metadataMapper, + DatabaseService databaseService, DatabaseRepository databaseRepository, + DataServiceGateway dataServiceGateway) { + this.searchService = searchService; this.metadataMapper = metadataMapper; this.databaseService = databaseService; this.databaseRepository = databaseRepository; this.dataServiceGateway = dataServiceGateway; - this.searchServiceGateway = searchServiceGateway; } @Override @@ -79,7 +79,7 @@ public class AccessServiceImpl implements AccessService { .add(access); database = databaseRepository.save(database); /* create in search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Created access to database with id {}", database.getId()); return access; } @@ -104,7 +104,7 @@ public class AccessServiceImpl implements AccessService { .setType(metadataMapper.accessTypeDtoToAccessType(access)); database = databaseRepository.save(database); /* update in search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Updated access to database with id {}", database.getId()); } @@ -120,7 +120,7 @@ public class AccessServiceImpl implements AccessService { .remove(find(database, user)); databaseRepository.save(database); /* update in search service */ - searchServiceGateway.update(databaseService.findById(database.getId())); + searchService.save(databaseService.findById(database.getId())); log.info("Deleted access to database with id {}", database.getId()); } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java index 7415ded56a8a2a926742ef3b44b025f7fb535baa..d06c67b7b8ce837e254042728fd3d5c8056e97bf 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java @@ -20,10 +20,10 @@ import at.tuwien.entities.database.table.constraints.unique.Unique; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; import at.tuwien.mapper.MetadataMapper; import at.tuwien.repository.DatabaseRepository; import at.tuwien.service.DatabaseService; +import at.tuwien.service.SearchService; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -39,18 +39,18 @@ import java.util.UUID; @Service public class DatabaseServiceImpl implements DatabaseService { + private final SearchService searchService; private final MetadataMapper metadataMapper; private final DatabaseRepository databaseRepository; private final DataServiceGateway dataServiceGateway; - private final SearchServiceGateway searchServiceGateway; @Autowired - public DatabaseServiceImpl(MetadataMapper metadataMapper, DatabaseRepository databaseRepository, - DataServiceGateway dataServiceGateway, SearchServiceGateway searchServiceGateway) { + public DatabaseServiceImpl(SearchService searchService, MetadataMapper metadataMapper, + DatabaseRepository databaseRepository, DataServiceGateway dataServiceGateway) { + this.searchService = searchService; this.metadataMapper = metadataMapper; this.databaseRepository = databaseRepository; this.dataServiceGateway = dataServiceGateway; - this.searchServiceGateway = searchServiceGateway; } @Override @@ -137,7 +137,7 @@ public class DatabaseServiceImpl implements DatabaseService { .toList()); final Database database = databaseRepository.save(entity1); /* create in search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Created database with id {}", database.getId()); return database; } @@ -171,7 +171,7 @@ public class DatabaseServiceImpl implements DatabaseService { .forEach(table -> table.setIsSchemaPublic(data.getIsSchemaPublic())); database = databaseRepository.save(database); /* update in open search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Updated database visibility of database with id {}", database.getId()); return database; } @@ -187,7 +187,7 @@ public class DatabaseServiceImpl implements DatabaseService { database.setContactPerson(user.getId()); database = databaseRepository.save(database); /* save in search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Updated database owner of database with id {}", database); return database; } @@ -200,7 +200,7 @@ public class DatabaseServiceImpl implements DatabaseService { database.setImage(image); database = databaseRepository.save(database); /* save in search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Updated database owner of database with id {} & search database", database.getId()); return database; } @@ -317,7 +317,7 @@ public class DatabaseServiceImpl implements DatabaseService { /* update in metadata database */ database = databaseRepository.save(database); /* save in search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Updated table metadata of database with id {} & search database", database.getId()); return database; } @@ -344,7 +344,7 @@ public class DatabaseServiceImpl implements DatabaseService { /* update in metadata database */ database = databaseRepository.save(database); /* save in search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Updated view metadata of database with id {} & search database", database.getId()); return database; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java index 39e4824706a6d89a3588c6748c46ee2c3935b63e..e482cfd3c64e81cda98d0dda1ed29279e384d975 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java @@ -16,10 +16,10 @@ import at.tuwien.entities.identifier.IdentifierTitle; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; import at.tuwien.mapper.MetadataMapper; import at.tuwien.repository.IdentifierRepository; import at.tuwien.service.IdentifierService; +import at.tuwien.service.SearchService; import at.tuwien.service.ViewService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; @@ -42,24 +42,24 @@ import java.util.stream.Stream; public class IdentifierServiceImpl implements IdentifierService { private final ViewService viewService; + private final SearchService searchService; private final MetadataConfig metadataConfig; private final MetadataMapper metadataMapper; private final TemplateEngine templateEngine; private final DataServiceGateway dataServiceGateway; private final IdentifierRepository identifierRepository; - private final SearchServiceGateway searchServiceGateway; - public IdentifierServiceImpl(ViewService viewService, TemplateEngine templateEngine, MetadataMapper metadataMapper, - MetadataConfig metadataConfig, DataServiceGateway dataServiceGateway, - IdentifierRepository identifierRepository, SearchServiceGateway searchServiceGateway) { + public IdentifierServiceImpl(ViewService viewService, SearchService searchService, TemplateEngine templateEngine, + MetadataMapper metadataMapper, MetadataConfig metadataConfig, + DataServiceGateway dataServiceGateway, IdentifierRepository identifierRepository) { this.viewService = viewService; + this.searchService = searchService; this.metadataConfig = metadataConfig; this.metadataMapper = metadataMapper; this.templateEngine = templateEngine; this.dataServiceGateway = dataServiceGateway; this.identifierRepository = identifierRepository; - this.searchServiceGateway = searchServiceGateway; } @Override @@ -153,7 +153,7 @@ public class IdentifierServiceImpl implements IdentifierService { identifier.setStatus(IdentifierStatusType.PUBLISHED); identifier = identifierRepository.save(identifier); /* update in search service */ - searchServiceGateway.update(identifier.getDatabase()); + searchService.save(identifier.getDatabase()); log.info("Published identifier with id {}", identifier.getId()); return identifier; } @@ -314,7 +314,7 @@ public class IdentifierServiceImpl implements IdentifierService { identifier.getDatabase() .getIdentifiers() .add(out); - searchServiceGateway.update(identifier.getDatabase()); + searchService.save(identifier.getDatabase()); return out; } @@ -378,7 +378,7 @@ public class IdentifierServiceImpl implements IdentifierService { identifier.getDatabase() .getIdentifiers() .remove(identifier); - searchServiceGateway.update(identifier.getDatabase()); + searchService.save(identifier.getDatabase()); log.info("Deleted identifier with id {}", identifier.getId()); } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/SearchServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/SearchServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..ef9840cbbae8e38962a3b60a6249ffb73743054a --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/SearchServiceImpl.java @@ -0,0 +1,49 @@ +package at.tuwien.service.impl; + +import at.tuwien.api.database.DatabaseDto; +import at.tuwien.entities.database.Database; +import at.tuwien.exception.DatabaseNotFoundException; +import at.tuwien.exception.SearchServiceConnectionException; +import at.tuwien.exception.SearchServiceException; +import at.tuwien.gateway.SearchServiceGateway; +import at.tuwien.service.SearchService; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Log4j2 +@Service +public class SearchServiceImpl implements SearchService { + + private final SearchServiceGateway searchServiceGateway; + + @Autowired + public SearchServiceImpl(SearchServiceGateway searchServiceGateway) { + this.searchServiceGateway = searchServiceGateway; + } + + @Override + public DatabaseDto save(Database database) throws SearchServiceException, DatabaseNotFoundException, + SearchServiceConnectionException { + if (!database.getIsPublic() || !database.getIsSchemaPublic()) { + log.warn("Database with id {} cannot be saved to be visible in search", database.getId()); + return null; + } + database.setTables(database.getTables() + .stream() + .filter(t -> t.getIsPublic() || t.getIsSchemaPublic()) + .toList()); + database.setViews(database.getViews() + .stream() + .filter(v -> v.getIsPublic() || v.getIsSchemaPublic()) + .toList()); + return searchServiceGateway.save(database); + } + + @Override + public void delete(Long databaseId) throws SearchServiceException, DatabaseNotFoundException, + SearchServiceConnectionException { + searchServiceGateway.delete(databaseId); + } + +} 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..6239d95c9e346f675e3c32395fd50c5ffe0e8b91 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 @@ -15,7 +15,6 @@ import at.tuwien.entities.database.table.columns.TableColumnUnit; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; import at.tuwien.mapper.MetadataMapper; import at.tuwien.repository.DatabaseRepository; import at.tuwien.service.*; @@ -38,26 +37,26 @@ public class TableServiceImpl implements TableService { private final UnitService unitService; private final RabbitConfig rabbitConfig; private final EntityService entityService; + private final SearchService searchService; private final ConceptService conceptService; private final MetadataMapper metadataMapper; private final DataServiceGateway dataServiceGateway; private final DatabaseRepository databaseRepository; - private final SearchServiceGateway searchServiceGateway; @Autowired public TableServiceImpl(UserService userService, UnitService unitService, RabbitConfig rabbitConfig, - EntityService entityService, ConceptService conceptService, MetadataMapper metadataMapper, - DataServiceGateway dataServiceGateway, DatabaseRepository databaseRepository, - SearchServiceGateway searchServiceGateway) { + EntityService entityService, SearchService searchService, ConceptService conceptService, + MetadataMapper metadataMapper, DataServiceGateway dataServiceGateway, + DatabaseRepository databaseRepository) { this.userService = userService; this.unitService = unitService; this.rabbitConfig = rabbitConfig; this.entityService = entityService; + this.searchService = searchService; this.conceptService = conceptService; this.metadataMapper = metadataMapper; this.dataServiceGateway = dataServiceGateway; this.databaseRepository = databaseRepository; - this.searchServiceGateway = searchServiceGateway; } @Override @@ -173,7 +172,7 @@ public class TableServiceImpl implements TableService { throw new TableNotFoundException("Failed to find created table"); } /* update in search service */ - searchServiceGateway.update(entity); + searchService.save(entity); log.info("Created table with id {}", optional.get().getId()); return optional.get(); } @@ -191,7 +190,7 @@ public class TableServiceImpl implements TableService { .remove(table); final Database database = databaseRepository.save(table.getDatabase()); /* update in search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Deleted table with id {}", table.getId()); } @@ -218,7 +217,7 @@ public class TableServiceImpl implements TableService { tableEntity.setDescription(data.getDescription()); final Database database = databaseRepository.save(table.getDatabase()); /* update in search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Updated table with id {}", table.getId()); return tableEntity; } @@ -258,7 +257,7 @@ public class TableServiceImpl implements TableService { .set(table.getColumns().indexOf(column), column); final Database database = databaseRepository.save(table.getDatabase()); /* update in open search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Updated table column semantics"); return column; } @@ -310,7 +309,7 @@ public class TableServiceImpl implements TableService { .set(database.getTables().indexOf(table), table); databaseRepository.save(database); /* update in open search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Updated statistics for the table and {} column(s)", table.getColumns().size()); log.trace("updated statistics: {}", table); } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java index b0a8f017962ccc808d8f3d1a37ae584fb1106316..2f8e7671ed41667d4891aba73e6cf1b3ae6d0cea 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java @@ -8,9 +8,9 @@ import at.tuwien.entities.database.View; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; import at.tuwien.mapper.MetadataMapper; import at.tuwien.repository.DatabaseRepository; +import at.tuwien.service.SearchService; import at.tuwien.service.ViewService; import com.google.common.hash.Hashing; import lombok.extern.log4j.Log4j2; @@ -27,18 +27,18 @@ import java.util.Optional; @Service public class ViewServiceImpl implements ViewService { + private final SearchService searchService; private final MetadataMapper metadataMapper; private final DataServiceGateway dataServiceGateway; private final DatabaseRepository databaseRepository; - private final SearchServiceGateway searchServiceGateway; @Autowired public ViewServiceImpl(MetadataMapper metadataMapper, DataServiceGateway dataServiceGateway, - DatabaseRepository databaseRepository, SearchServiceGateway searchServiceGateway) { + DatabaseRepository databaseRepository, SearchService searchService) { this.metadataMapper = metadataMapper; this.dataServiceGateway = dataServiceGateway; this.databaseRepository = databaseRepository; - this.searchServiceGateway = searchServiceGateway; + this.searchService = searchService; } @Override @@ -81,7 +81,7 @@ public class ViewServiceImpl implements ViewService { .remove(view); final Database database = databaseRepository.save(view.getDatabase()); /* update in search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Deleted view with id {}", view.getId()); } @@ -129,7 +129,7 @@ public class ViewServiceImpl implements ViewService { throw new MalformedException("Failed to find created view"); } /* update in search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Created view with id {}", optional.get().getId()); return optional.get(); } @@ -151,7 +151,7 @@ public class ViewServiceImpl implements ViewService { tmpView.setIsSchemaPublic(data.getIsSchemaPublic()); database = databaseRepository.save(database); /* update in search service */ - searchServiceGateway.update(database); + searchService.save(database); log.info("Updated view with id {}", tmpView.getId()); return optional.get(); } diff --git a/dbrepo-search-service/app.py b/dbrepo-search-service/app.py index e4e8581a9ee484c198f5a00a76a58b5296dd4188..797b30f1b91d1b106fe7159de908d032faa6de60 100644 --- a/dbrepo-search-service/app.py +++ b/dbrepo-search-service/app.py @@ -5,8 +5,6 @@ from json import dumps from typing import List, Any import requests -from clients.keycloak_client import User, KeycloakClient -from clients.opensearch_client import OpenSearchClient from dbrepo.api.dto import Database, ApiError from flasgger import LazyJSONEncoder, Swagger, swag_from from flask import Flask, request @@ -17,6 +15,9 @@ from opensearchpy import NotFoundError from prometheus_flask_exporter import PrometheusMetrics from pydantic import ValidationError +from clients.keycloak_client import User, KeycloakClient +from clients.opensearch_client import OpenSearchClient + logging.addLevelName(level=logging.NOTSET, levelName='TRACE') logging.basicConfig(level=logging.DEBUG) @@ -332,13 +333,13 @@ def get_fuzzy_search(): :return: """ search_term: str = request.args.get('q') + logging.debug(f'endpoint get fuzzy search, q={search_term}') if search_term is None or len(search_term) == 0: return ApiError(status='BAD_REQUEST', message='Provide a search term with ?q=term', code='search.fuzzy.invalid').model_dump(), 400 logging.debug(f"search request query: {search_term}") - results = OpenSearchClient().fuzzy_search(search_term) - if "hits" in results and "hits" in results["hits"]: - results = [hit["_source"] for hit in results["hits"]["hits"]] + results = OpenSearchClient().fuzzy_search(search_term, + KeycloakClient().userId(request.headers.get('Authorization'))) return dict({"results": results}), 200 @@ -354,7 +355,8 @@ def post_general_search(field_type): return ApiError(status='UNSUPPORTED_MEDIA_TYPE', message='Content type needs to be application/json', code='search.general.media').model_dump(), 415 req_body = request.json - logging.info(f'Searching in index database for type: {field_type}') + logging.debug(f'endpoint get general search, field_type={field_type}') + logging.debug(f'=====> {request}') t1 = request.args.get("t1") if not str(t1).isdigit(): t1 = None @@ -362,9 +364,11 @@ def post_general_search(field_type): if not str(t2).isdigit(): t2 = None if t1 is not None and t2 is not None and "unit.uri" in req_body and "concept.uri" in req_body: - response = OpenSearchClient().unit_independent_search(t1, t2, req_body) + response = OpenSearchClient().unit_independent_search(t1, t2, req_body, KeycloakClient().userId( + request.headers.get('Authorization'))) else: - response = OpenSearchClient().general_search(field_type, req_body) + response = OpenSearchClient().general_search(field_type, req_body, + KeycloakClient().userId(request.headers.get('Authorization'))) # filter by type if field_type == 'table': tmp = [] diff --git a/dbrepo-search-service/init/clients/keycloak_client.py b/dbrepo-search-service/init/clients/keycloak_client.py index afa36a1112ce41b5686641f5691df3f44075cf2f..b12c3779f5d8a8385440a99b20c2d5a021b25011 100644 --- a/dbrepo-search-service/init/clients/keycloak_client.py +++ b/dbrepo-search-service/init/clients/keycloak_client.py @@ -1,14 +1,15 @@ import logging from dataclasses import dataclass -import requests -from flask import current_app from typing import List +import requests +from flask import current_app from jwt import jwk_from_pem, JWT @dataclass(init=True, eq=True) class User: + sub: str username: str roles: List[str] @@ -33,5 +34,11 @@ class KeycloakClient: def verify_jwt(self, access_token: str) -> User: public_key = jwk_from_pem(str(current_app.config["JWT_PUBKEY"]).encode('utf-8')) payload = JWT().decode(message=access_token, key=public_key, do_time_check=True) - logging.debug(f"JWT token client_id={payload.get('client_id')} and realm_access={payload.get('realm_access')}") return User(username=payload.get('client_id'), roles=payload.get('realm_access')["roles"]) + + def userId(self, request) -> str | None: + # get the auth token + auth_header = request.headers.get('Authorization') + if auth_header: + return self.verify_jwt(auth_header.split(" ")[1]).sub + return None diff --git a/dbrepo-search-service/init/clients/opensearch_client.py b/dbrepo-search-service/init/clients/opensearch_client.py index bf782a7a7e8245c5cd57eea5a641b7f14c46df07..69f6ab7f4cd671fc816cfe0dab6fc777134f5271 100644 --- a/dbrepo-search-service/init/clients/opensearch_client.py +++ b/dbrepo-search-service/init/clients/opensearch_client.py @@ -43,18 +43,6 @@ class OpenSearchClient: http_auth=(self.username, self.password)) return self.instance - def get_database(self, database_id: int) -> Database: - """ - Gets a database by given id. - - @param database_id: The database id. - - @returns: The database, if successful. - @throws: opensearchpy.exceptions.NotFoundError If the database was not found in the Search Database. - """ - response: dict = self._instance().get(index="database", id=database_id) - return Database.model_validate(response["_source"]) - def update_database(self, database_id: int, data: Database) -> Database: """ Updates the database data with given id. @@ -142,7 +130,7 @@ class OpenSearchClient: fields_list.append(entry) return fields_list - def fuzzy_search(self, search_term=None): + def fuzzy_search(self, search_term: str = None, userId: str | None = None) -> [Database]: logging.info(f"Performing fuzzy search") fuzzy_body = { "query": { @@ -159,10 +147,15 @@ class OpenSearchClient: index="database", body=fuzzy_body ) - logging.info(f"Found {len(response['hits']['hits'])} result(s)") - return response + results: [Database] = [] + if "hits" in results and "hits" in response["hits"]: + results = [Database.model_validate(hit["_source"]) for hit in response["hits"]["hits"]] + results = [database for database in results if database.is_public or database.is_schema_public or ( + userId is not None and database.owner.id == userId)] + return results - def general_search(self, field_type: str = None, field_value_pairs: dict = None): + def general_search(self, field_type: str = None, field_value_pairs: dict = None, userId: str | None = None) -> [ + Database]: """ Main method for searching stuff in the opensearch db @@ -203,10 +196,15 @@ class OpenSearchClient: index="database", body=dumps(body) ) - results = [hit["_source"] for hit in response["hits"]["hits"]] + results: [Database] = [] + if "hits" in results and "hits" in response["hits"]: + results = [Database.model_validate(hit["_source"]) for hit in response["hits"]["hits"]] + results = [database for database in results if database.is_public or database.is_schema_public or ( + userId is not None and database.owner.id == userId)] return results - def unit_independent_search(self, t1: float, t2: float, field_value_pairs): + def unit_independent_search(self, t1: float, t2: float, field_value_pairs: dict, userId: str | None = None) -> [ + Database]: """ Main method for searching stuff in the opensearch db @@ -287,16 +285,12 @@ class OpenSearchClient: body = '' for search in searches: body += '%s \n' % dumps(search) - responses = self._instance().msearch( + response = self._instance().msearch( body=dumps(body) ) - response = { - "hits": { - "hits": flatten([hits["hits"]["hits"] for hits in responses["responses"]]) - }, - "took": responses["took"] - } - return response + results = flatten([hits["hits"]["hits"] for hits in response["responses"]]) + return [database for database in results if + database.is_public or database.is_schema_public or (userId is not None and database.owner.id == userId)] def key_to_attr_name(key: str) -> str: diff --git a/dbrepo-search-service/test/test_opensearch_client.py b/dbrepo-search-service/test/test_opensearch_client.py index e37a96db10aaf44c9f588907295a2622c1fc0d38..c20ce9862408ea3d44a9b8932f0474b5246c3441 100644 --- a/dbrepo-search-service/test/test_opensearch_client.py +++ b/dbrepo-search-service/test/test_opensearch_client.py @@ -165,27 +165,6 @@ class OpenSearchClientTest(unittest.TestCase): # test OpenSearchClient().delete_database(database_id=req.id) - def test_get_database_succeeds(self): - with app.app_context(): - # mock - OpenSearchClient().update_database(database_id=req.id, data=req) - - # test - database = OpenSearchClient().get_database(database_id=req.id) - self.assertEqual(req.id, database.id) - - def test_get_database_fails(self): - with app.app_context(): - - # mock - OpenSearchClient().update_database(database_id=req.id, data=req) - - # test - try: - OpenSearchClient().get_database(database_id=req.id) - except opensearchpy.exceptions.NotFoundError: - pass - def test_get_fields_for_index_database_succeeds(self): with app.app_context(): # mock diff --git a/dbrepo-ui/nuxt.config.ts b/dbrepo-ui/nuxt.config.ts index b8e55da8023daf790048ab9bfd5f48a0b82d2ba3..4bce6ec5c5b3dc7f025734d9bf15d8e914123f79 100644 --- a/dbrepo-ui/nuxt.config.ts +++ b/dbrepo-ui/nuxt.config.ts @@ -75,8 +75,8 @@ export default defineNuxtConfig({ } }, api: { - client: 'https://s155.datalab.tuwien.ac.at', - server: 'https://s155.datalab.tuwien.ac.at', + client: 'http://localhost', + server: 'http://gateway-service', }, upload: { client: 'http://localhost/api/upload/files',