diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierStatusRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierStatusRequest.java index 9b5518410..ff67a0661 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierStatusRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierStatusRequest.java @@ -17,5 +17,7 @@ public class CreateOrUpdateDossierStatusRequest { private String description; + private String color; + private String dossierTemplateId; } 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 9843fb475..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 @@ -20,6 +20,8 @@ public class DossierStatusInfo { private String id; private String name; 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 5a52c56f5..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 @@ -13,6 +13,7 @@ public interface DossierStatusResource { String DOSSIER_STATUS_PATH = "/dossier-status"; String DOSSIER_TEMPLATE_PATH = "/dossier-template"; + String DOSSIER_TEMPLATE_ID = "dossierTemplateId"; String DOSSIER_TEMPLATE_ID_PATH_VARIABLE = "/{" + DOSSIER_TEMPLATE_ID + "}"; @@ -26,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 bf748095c..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; @@ -26,6 +27,9 @@ public class DossierStatusEntity { @Column private String description; + @Column + private String color; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "dossier_template_id") private DossierTemplateEntity dossierTemplate; @@ -35,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 5aed40368..cbbde7b89 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; @@ -29,14 +30,15 @@ public class DossierStatusPersistenceService { if (createOrUpdateDossierStatusRequest.getDossierStatusId() != null) { //update Optional dossierStatus = dossierStatusRepository.findById(createOrUpdateDossierStatusRequest.getDossierStatusId()); if (dossierStatus.isPresent()) { - validateDossierTemplateNameIsUnique(createOrUpdateDossierStatusRequest.getName(), createOrUpdateDossierStatusRequest.getDossierTemplateId()); + validateDossierTemplateNameIsUnique(createOrUpdateDossierStatusRequest.getName(), createOrUpdateDossierStatusRequest.getDossierTemplateId(), + createOrUpdateDossierStatusRequest.getDossierStatusId()); BeanUtils.copyProperties(createOrUpdateDossierStatusRequest, dossierStatus.get()); return dossierStatus.get(); } else { throw new NotFoundException(String.format(DOSSIER_STATUS_NOT_FOUND_MESSAGE, createOrUpdateDossierStatusRequest.getDossierStatusId())); } } else { - validateDossierTemplateNameIsUnique(createOrUpdateDossierStatusRequest.getName(), createOrUpdateDossierStatusRequest.getDossierTemplateId()); + validateDossierTemplateNameIsUnique(createOrUpdateDossierStatusRequest.getName(), createOrUpdateDossierStatusRequest.getDossierTemplateId(),null); DossierStatusEntity dossierStatus = new DossierStatusEntity(); dossierStatus.setId(UUID.randomUUID().toString()); BeanUtils.copyProperties(createOrUpdateDossierStatusRequest, dossierStatus); @@ -48,12 +50,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) { @@ -63,6 +67,9 @@ public class DossierStatusPersistenceService { @Transactional public void deleteDossierStatus(String dossierStatusId, String replaceDossierStatusId) { + if (dossierStatusId.equalsIgnoreCase(replaceDossierStatusId)) { + throw new BadRequestException("Cannot replace with self"); + } dossierStatusRepository.findById(dossierStatusId).ifPresent(toDeleteDossierStatus -> { @@ -82,9 +89,9 @@ public class DossierStatusPersistenceService { dossierStatusRepository.deleteById(dossierStatusId); } - public void validateDossierTemplateNameIsUnique(String dossierStatusName, String dossierTemplateId) { + public void validateDossierTemplateNameIsUnique(String dossierStatusName, String dossierTemplateId, String dossierStatusId) { getAllDossierStatusForTemplate(dossierTemplateId).forEach(existing -> { - if (existing.getName().equals(dossierStatusName)) { + if (existing.getName().equals(dossierStatusName) && !existing.getId().equals(dossierStatusId)) { throw new ConflictException("DossierStatus name must be unique within the same dossier template"); } }); 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/main/resources/db/changelog/6-dossier-status-table.changelog.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/6-dossier-status-table.changelog.yaml index 6e9a8a535..43794f8db 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/6-dossier-status-table.changelog.yaml +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/6-dossier-status-table.changelog.yaml @@ -13,8 +13,11 @@ databaseChangeLog: name: id type: VARCHAR(255) - column: - name: description + name: color type: VARCHAR(255) + - column: + name: description + type: VARCHAR(20) - column: name: dossier_template_id type: VARCHAR(255) 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..0497026d4 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,12 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest { var loadedDossierStatus = dossierStatusClient.createOrUpdateDossierStatus(crudsr); assertThat(loadedDossierStatus).isNotNull(); - allDossierStatus = dossierStatusClient.getAllDossierStatus(); + crudsr.setDossierStatusId(loadedDossierStatus.getId()); + crudsr.setDescription("New Description"); + var updatedStatus = dossierStatusClient.createOrUpdateDossierStatus(crudsr); + assertThat(updatedStatus).isNotNull(); + + allDossierStatus = dossierStatusClient.getAllDossierStatusForTemplate(dossierTemplate.getId()); assertThat(allDossierStatus.size()).isEqualTo(1); var testDossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "1", allDossierStatus.iterator().next()); @@ -56,6 +61,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();