diff --git a/src/integrationTest/java/net/geant/nmaas/portal/api/market/ApplicationControllerIntTest.java b/src/integrationTest/java/net/geant/nmaas/portal/api/market/ApplicationControllerIntTest.java index 15dd785a78fd69303b7ffe7e1ff3e6ed449c68db..762b9a8174d6b52b26cecfd3eea8d167fc9a9d23 100644 --- a/src/integrationTest/java/net/geant/nmaas/portal/api/market/ApplicationControllerIntTest.java +++ b/src/integrationTest/java/net/geant/nmaas/portal/api/market/ApplicationControllerIntTest.java @@ -20,6 +20,7 @@ import net.geant.nmaas.portal.api.domain.AppConfigurationSpecView; import net.geant.nmaas.portal.api.domain.AppDeploymentSpecView; import net.geant.nmaas.portal.api.domain.AppStorageVolumeView; import net.geant.nmaas.portal.api.domain.ApplicationBaseView; +import net.geant.nmaas.portal.api.domain.ApplicationBaseViewS; import net.geant.nmaas.portal.api.domain.ApplicationDTO; import net.geant.nmaas.portal.api.domain.ApplicationStateChangeRequest; import net.geant.nmaas.portal.api.domain.ApplicationView; @@ -122,12 +123,13 @@ class ApplicationControllerIntTest extends BaseControllerTestSetup { @Test void shouldGetActiveApplications() throws Exception { + log.error("Test = {} {}", this.applicationBaseRepository.findAll().size(), this.applicationBaseRepository.findAllSmall().size()); MvcResult result = mvc.perform(get("/api/apps/base") .header("Authorization", "Bearer " + getValidTokenForUser(UsersHelper.ADMIN)) .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andReturn(); - ApplicationBaseView[] resultView = objectMapper.readValue(result.getResponse().getContentAsByteArray(), ApplicationBaseView[].class); + ApplicationBaseViewS[] resultView = objectMapper.readValue(result.getResponse().getContentAsByteArray(), ApplicationBaseViewS[].class); assertEquals(1, resultView.length); assertEquals(APP_1_NAME, resultView[0].getName()); } @@ -313,6 +315,14 @@ class ApplicationControllerIntTest extends BaseControllerTestSetup { .andReturn(); ApplicationView applicationView = objectMapper.readValue(result.getResponse().getContentAsByteArray(), ApplicationView.class); assertEquals(ApplicationState.DISABLED, applicationView.getState()); + + //reverse state to active again + mvc.perform(patch("/api/apps/state/" + id) + .header("Authorization", "Bearer " + getValidTokenForUser(UsersHelper.ADMIN)) + .content(objectMapper.writeValueAsString(new ApplicationStateChangeRequest(ApplicationState.ACTIVE, "reason", false))) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); } @Test diff --git a/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java b/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java index 75dd1449095a3ade806646aff1ba8c823dfe0a5b..113a43c9a5e64f616b9488bb17ed6e59ca9216b6 100644 --- a/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java +++ b/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java @@ -91,7 +91,6 @@ public class ApplicationController extends AppBaseController { @Transactional public List<ApplicationBaseViewS> getAllActiveApplicationBase() { return appBaseService.findAllActiveAppsSmall().stream() - .map(app -> modelMapper.map(app, ApplicationBaseViewS.class)) .map(this::setAppRating) .collect(Collectors.toList()); } diff --git a/src/main/java/net/geant/nmaas/portal/persistent/repositories/ApplicationBaseRepository.java b/src/main/java/net/geant/nmaas/portal/persistent/repositories/ApplicationBaseRepository.java index f14232e7fc6caa5920598c147ed8a6f231a228fb..2598abe671ce4f4f49ced01dcc04bdb448378d49 100644 --- a/src/main/java/net/geant/nmaas/portal/persistent/repositories/ApplicationBaseRepository.java +++ b/src/main/java/net/geant/nmaas/portal/persistent/repositories/ApplicationBaseRepository.java @@ -1,9 +1,12 @@ package net.geant.nmaas.portal.persistent.repositories; import net.geant.nmaas.portal.api.domain.ApplicationBaseS; +import net.geant.nmaas.portal.persistent.entity.AppDescription; import net.geant.nmaas.portal.persistent.entity.ApplicationBase; +import net.geant.nmaas.portal.persistent.entity.Tag; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -26,7 +29,18 @@ public interface ApplicationBaseRepository extends JpaRepository<ApplicationBase // " WHERE a.state = 'ACTIVE' ", nativeQuery = true) // List<ApplicationBaseSTest> findAllSmallQuery(); - @Query("Select ab from ApplicationBase ab JOIN ApplicationVersion av on av.appVersionId = ab.id WHERE av.state = 'ACTIVE'") + @Query(value = "Select ab.* from application_base ab JOIN application_base_versions abv on abv.application_base_id = ab.id JOIN application_version av ON av.id = abv.versions_id WHERE av.state = 'ACTIVE'", nativeQuery = true) List<ApplicationBaseS> findAllSmall(); +// @Query(value = "select ad.* FROM app_description ad JOIN application_base_descriptions abd ON ad.id = abd.descriptions_id WHERE abd.application_base_id =:base_id", nativeQuery = true) +// List<AppDescription> findDescriptionsForBase(Long base_id); +// +// @Query(value = "select tg.* FROM tag tg JOIN application_base_tag abt ON tg.tag_id = abt.tag_id WHERE abt.application_base_id =?1", nativeQuery = true) +// List<Object> findTagsForBase(Long base_id); + + @Query("Select ab.tags FROM ApplicationBase ab where ab.id =?1") + List<Tag> findAllBaseTag(Long base_id); + + @Query("Select ab.descriptions FROM ApplicationBase ab where ab.id =?1") + List<AppDescription> findAllBaseDescription(Long base_id); } \ No newline at end of file diff --git a/src/main/java/net/geant/nmaas/portal/persistent/repositories/TagRepository.java b/src/main/java/net/geant/nmaas/portal/persistent/repositories/TagRepository.java index bce8d0a1a2e93d7e31ded54164f72274de8bf021..3d1c846d8d0a9ca592a6ff7bd51b927e47f98852 100644 --- a/src/main/java/net/geant/nmaas/portal/persistent/repositories/TagRepository.java +++ b/src/main/java/net/geant/nmaas/portal/persistent/repositories/TagRepository.java @@ -1,10 +1,10 @@ package net.geant.nmaas.portal.persistent.repositories; -import java.util.Optional; +import net.geant.nmaas.portal.persistent.entity.Tag; import org.springframework.data.jpa.repository.JpaRepository; -import net.geant.nmaas.portal.persistent.entity.Tag; +import java.util.Optional; public interface TagRepository extends JpaRepository<Tag, Long> { - Optional<Tag> findByName(String source); -} + Optional<Tag> findByName(String source); +} \ No newline at end of file diff --git a/src/main/java/net/geant/nmaas/portal/service/ApplicationBaseService.java b/src/main/java/net/geant/nmaas/portal/service/ApplicationBaseService.java index 8df8c76cb250247843dedac345bc410ca32eb3ac..0f6ce93f96b401c9bada376339e903d6556bb9e0 100644 --- a/src/main/java/net/geant/nmaas/portal/service/ApplicationBaseService.java +++ b/src/main/java/net/geant/nmaas/portal/service/ApplicationBaseService.java @@ -19,7 +19,7 @@ public interface ApplicationBaseService { List<ApplicationBase> findAll(); List<ApplicationBase> findAllActiveApps(); - List<ApplicationBaseS> findAllActiveAppsSmall(); + List<ApplicationBaseViewS> findAllActiveAppsSmall(); ApplicationBase getBaseApp(Long id); ApplicationBase findByName(String name); diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java index 93447679015cb39b50ee17287adf1915a9ff5e2c..04960f4c775cdcb123f31162d5c7eb7482eb18fa 100644 --- a/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java +++ b/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java @@ -2,7 +2,9 @@ package net.geant.nmaas.portal.service.impl; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; -import net.geant.nmaas.portal.api.domain.ApplicationBaseS; +import net.geant.nmaas.portal.api.domain.AppDescriptionView; +import net.geant.nmaas.portal.api.domain.ApplicationBaseViewS; +import net.geant.nmaas.portal.api.domain.TagView; import net.geant.nmaas.portal.api.exception.MissingElementException; import net.geant.nmaas.portal.api.exception.ProcessingException; import net.geant.nmaas.portal.events.ApplicationActivatedEvent; @@ -16,6 +18,8 @@ import net.geant.nmaas.portal.service.ApplicationBaseService; import net.geant.nmaas.portal.service.ApplicationStatePerDomainService; import net.geant.nmaas.portal.service.DomainService; import org.apache.commons.lang3.StringUtils; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; @@ -24,6 +28,7 @@ import java.time.OffsetDateTime; import java.util.HashSet; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; @Service @@ -39,6 +44,9 @@ public class ApplicationBaseServiceImpl implements ApplicationBaseService { private final ApplicationEventPublisher eventPublisher; private final DomainService domainService; + @Autowired + protected ModelMapper modelMapper; + @Override @Transactional public ApplicationBase create(ApplicationBase applicationBase) { @@ -121,8 +129,14 @@ public class ApplicationBaseServiceImpl implements ApplicationBaseService { .collect(Collectors.toList()); } - public List<ApplicationBaseS> findAllActiveAppsSmall() { - return appBaseRepository.findAllSmall(); + @Override + public List<ApplicationBaseViewS> findAllActiveAppsSmall() { + + return appBaseRepository.findAllSmall().stream() + .map(app -> modelMapper.map(app, ApplicationBaseViewS.class)) + .peek(app -> app.setDescriptions(List.of(modelMapper.map(appBaseRepository.findAllBaseDescription(app.getId()), AppDescriptionView[].class)))) + .peek(app -> app.setTags(Set.of(modelMapper.map(appBaseRepository.findAllBaseTag(app.getId()), TagView[].class)))) + .collect(Collectors.toList()); } @Override diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceTest.java index abaf4c3f2421a1c35e2f934290705d3336f69636..30f8865e9d0fd7ba29d8046d6137a906373aa7dd 100644 --- a/src/test/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceTest.java +++ b/src/test/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceTest.java @@ -14,6 +14,7 @@ import net.geant.nmaas.portal.service.ApplicationStatePerDomainService; import net.geant.nmaas.portal.service.DomainService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.modelmapper.ModelMapper; import org.springframework.context.ApplicationEventPublisher; import java.util.Collections; @@ -43,11 +44,13 @@ public class ApplicationBaseServiceTest { private final ApplicationEventPublisher eventPublisher= mock(ApplicationEventPublisher.class); private final DomainService domainService = mock(DomainService.class); + private final ModelMapper modelMapper = new ModelMapper(); + private ApplicationBaseService appBaseService; @BeforeEach void setup() { - this.appBaseService = new ApplicationBaseServiceImpl(appBaseRepo, tagRepo, applicationStatePerDomainService,eventPublisher, domainService); + this.appBaseService = new ApplicationBaseServiceImpl(appBaseRepo, tagRepo, applicationStatePerDomainService,eventPublisher, domainService, modelMapper); applicationBase1.setDescriptions(Collections.singletonList( new AppDescription(11L, "en", "description", "full description") ));