diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStatusInfo.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStatusInfo.java index 1ba502394..bbd8e256a 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStatusInfo.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStatusInfo.java @@ -22,5 +22,6 @@ public class DossierStatusInfo { private String description; private String color; private String dossierTemplateId; + private Long dossierCount; } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatusResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatusResource.java index 67eebd8d2..b47ecb119 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatusResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatusResource.java @@ -27,11 +27,6 @@ public interface DossierStatusResource { @PostMapping(value = DOSSIER_STATUS_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) DossierStatusInfo createOrUpdateDossierStatus(@RequestBody CreateOrUpdateDossierStatusRequest dossierStatusRequest); - @ResponseBody - @ResponseStatus(value = HttpStatus.OK) - @GetMapping(value = DOSSIER_STATUS_PATH, produces = MediaType.APPLICATION_JSON_VALUE) - List getAllDossierStatus(); - @ResponseBody @ResponseStatus(value = HttpStatus.OK) @GetMapping(value = DOSSIER_STATUS_PATH + DOSSIER_TEMPLATE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java index f45c038e1..c411c287a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.hibernate.annotations.Formula; import javax.persistence.*; import java.util.ArrayList; @@ -38,4 +39,5 @@ public class DossierStatusEntity { @OneToMany(mappedBy = "dossierStatus") private List dossiers = new ArrayList<>(); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java index fff283fba..8c9f1c8d4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java @@ -6,6 +6,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.Confl import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierStatusRepository; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -48,12 +49,14 @@ public class DossierStatusPersistenceService { } } - public List getAllDossierStatus() { - return dossierStatusRepository.findAll(); + + public List getAllDossierStatusForTemplate(String dossierTemplateId) { + var x = dossierStatusRepository.getAllDossierStatusForDossierTemplate(dossierTemplateId); + return x; } - public List getAllDossierStatusForTemplate(String dossierTemplateId) { - return dossierStatusRepository.getAllDossierStatusForDossierTemplate(dossierTemplateId); + public DossierStatusInfo getDossierStatusInfo(String dossierStatusId) { + return dossierStatusRepository.findProjectionById(dossierStatusId).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_STATUS_NOT_FOUND_MESSAGE, dossierStatusId))); } public DossierStatusEntity getDossierStatus(String dossierStatusId) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java index a992eced4..4f3395b65 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java @@ -1,13 +1,20 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierStatusEntity; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import java.util.List; +import java.util.Optional; public interface DossierStatusRepository extends JpaRepository { - @Query("select s from DossierStatusEntity s where s.dossierTemplateId = :dossierTemplateId") - List getAllDossierStatusForDossierTemplate(String dossierTemplateId); + @Query("select new com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo(s.id, s.name," + + "s.description, s.color, s.dossierTemplateId, count(d)) from DossierStatusEntity s left outer join s.dossiers d where s.dossierTemplateId = :dossierTemplateId group by s") + List getAllDossierStatusForDossierTemplate(String dossierTemplateId); + + @Query("select new com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo(s.id, s.name," + + "s.description, s.color, s.dossierTemplateId, count(d)) from DossierStatusEntity s left outer join s.dossiers d where s.id = :dossierStatusId") + Optional findProjectionById(String dossierStatusId); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java index 3b69e69a0..db5c48d43 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java @@ -27,11 +27,6 @@ public class DossierStatusController implements DossierStatusResource { return convert(dossierStatusPersistenceService.createOrUpdateDossierStatus(dossierStatusRequest), DossierStatusInfo.class); } - @Override - public List getAllDossierStatus() { - - return convert(dossierStatusPersistenceService.getAllDossierStatus(), DossierStatusInfo.class); - } @Override public List getAllDossierStatusForTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId) { @@ -41,7 +36,7 @@ public class DossierStatusController implements DossierStatusResource { @Override public DossierStatusInfo getDossierStatus(@PathVariable(DOSSIER_STATUS_ID) String dossierStatusId) { - return convert(dossierStatusPersistenceService.getDossierStatus(dossierStatusId), DossierStatusInfo.class); + return dossierStatusPersistenceService.getDossierStatusInfo(dossierStatusId); } @Override diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java index a24fa2d44..9a24ca920 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java @@ -31,7 +31,7 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest { public void testDossierStatus() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - var allDossierStatus = dossierStatusClient.getAllDossierStatus(); + var allDossierStatus = dossierStatusClient.getAllDossierStatusForTemplate(dossierTemplate.getId()); assertThat(allDossierStatus.size()).isZero(); @@ -43,7 +43,7 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest { var loadedDossierStatus = dossierStatusClient.createOrUpdateDossierStatus(crudsr); assertThat(loadedDossierStatus).isNotNull(); - allDossierStatus = dossierStatusClient.getAllDossierStatus(); + allDossierStatus = dossierStatusClient.getAllDossierStatusForTemplate(dossierTemplate.getId()); assertThat(allDossierStatus.size()).isEqualTo(1); var testDossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "1", allDossierStatus.iterator().next()); @@ -56,6 +56,12 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest { cru.setDossierTemplateId(testDossier.getDossierTemplateId()); cru.setDossierStatusId(null); + allDossierStatus = dossierStatusClient.getAllDossierStatusForTemplate(dossierTemplate.getId()); + assertThat(allDossierStatus.size()).isEqualTo(1); + + assertThat(allDossierStatus.iterator().next().getDossierCount()).isEqualTo(1); + + var updated = dossierClient.updateDossier(cru, testDossier.getId()); assertThat(updated.getDossierStatusId()).isNull();