Pull request #215: Update

Merge in RED/persistence-service from update to master

* commit 'f55db3eaf4670349b78f7ffda2e62039eb9ca8a3':
  Dossier Status Self name
  Dossier Status dossier count
  color
  color
  Dossier Status fixes
This commit is contained in:
Timo Bejan 2022-02-01 14:24:20 +01:00
commit 664b1978e5
9 changed files with 52 additions and 24 deletions

View File

@ -17,5 +17,7 @@ public class CreateOrUpdateDossierStatusRequest {
private String description;
private String color;
private String dossierTemplateId;
}

View File

@ -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;
}

View File

@ -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<DossierStatusInfo> getAllDossierStatus();
@ResponseBody
@ResponseStatus(value = HttpStatus.OK)
@GetMapping(value = DOSSIER_STATUS_PATH + DOSSIER_TEMPLATE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)

View File

@ -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<DossierEntity> dossiers = new ArrayList<>();
}

View File

@ -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<DossierStatusEntity> 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<DossierStatusEntity> getAllDossierStatus() {
return dossierStatusRepository.findAll();
public List<DossierStatusInfo> getAllDossierStatusForTemplate(String dossierTemplateId) {
var x = dossierStatusRepository.getAllDossierStatusForDossierTemplate(dossierTemplateId);
return x;
}
public List<DossierStatusEntity> 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");
}
});

View File

@ -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<DossierStatusEntity, String> {
@Query("select s from DossierStatusEntity s where s.dossierTemplateId = :dossierTemplateId")
List<DossierStatusEntity> 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<DossierStatusInfo> 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<DossierStatusInfo> findProjectionById(String dossierStatusId);
}

View File

@ -27,11 +27,6 @@ public class DossierStatusController implements DossierStatusResource {
return convert(dossierStatusPersistenceService.createOrUpdateDossierStatus(dossierStatusRequest), DossierStatusInfo.class);
}
@Override
public List<DossierStatusInfo> getAllDossierStatus() {
return convert(dossierStatusPersistenceService.getAllDossierStatus(), DossierStatusInfo.class);
}
@Override
public List<DossierStatusInfo> 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

View File

@ -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)

View File

@ -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();