rank for 3.3.x

This commit is contained in:
Timo Bejan 2022-03-14 20:02:34 +02:00
parent 1a5fe56ea3
commit 1b20e4e387
8 changed files with 59 additions and 6 deletions

View File

@ -19,5 +19,7 @@ public class CreateOrUpdateDossierStatusRequest {
private String color;
private int rank;
private String dossierTemplateId;
}

View File

@ -22,6 +22,7 @@ public class DossierStatusInfo {
private String description;
private String color;
private String dossierTemplateId;
private int rank;
private Long dossierCount;
}

View File

@ -32,6 +32,9 @@ public class DossierStatusEntity {
@Column
private String color;
@Column
private int rank;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "dossier_template_id")
private DossierTemplateEntity dossierTemplate;

View File

@ -38,6 +38,13 @@ public class DossierStatusPersistenceService {
if (dossierStatus.isPresent()) {
validateDossierTemplateNameIsUnique(createOrUpdateDossierStatusRequest.getName(), createOrUpdateDossierStatusRequest.getDossierTemplateId(),
createOrUpdateDossierStatusRequest.getDossierStatusId());
if (createOrUpdateDossierStatusRequest.getRank() != dossierStatus.get().getRank()
&& dossierStatusRepository.getDuplicateRanks(dossierStatus.get().getDossierTemplateId(),
createOrUpdateDossierStatusRequest.getRank()) > 0) {
// in case of duplicate ranks, increase the ranks
dossierStatusRepository.adjustRanksForDossierTemplate(dossierStatus.get().getDossierTemplateId(),
createOrUpdateDossierStatusRequest.getRank());
}
BeanUtils.copyProperties(createOrUpdateDossierStatusRequest, dossierStatus.get());
return dossierStatus.get();
} else {
@ -49,6 +56,12 @@ public class DossierStatusPersistenceService {
dossierStatus.setId(UUID.randomUUID().toString());
BeanUtils.copyProperties(createOrUpdateDossierStatusRequest, dossierStatus);
var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(createOrUpdateDossierStatusRequest.getDossierTemplateId());
// in case of duplicate ranks, increase the ranks
if (dossierStatusRepository.getDuplicateRanks(createOrUpdateDossierStatusRequest.getDossierTemplateId(),
createOrUpdateDossierStatusRequest.getRank()) > 0) {
dossierStatusRepository.adjustRanksForDossierTemplate(createOrUpdateDossierStatusRequest.getDossierTemplateId(),
createOrUpdateDossierStatusRequest.getRank());
}
var loadedDossierStatus = dossierStatusRepository.save(dossierStatus);
loadedDossierStatus.setDossierTemplate(dossierTemplate);

View File

@ -3,6 +3,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
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.Modifying;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
@ -11,10 +12,22 @@ import java.util.Optional;
public interface DossierStatusRepository extends JpaRepository<DossierStatusEntity, String> {
@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 in ( :dossierTemplateIds ) group by s")
"s.description, s.color, s.dossierTemplateId, s.rank, count(d)) from DossierStatusEntity s " +
"left outer join s.dossiers d where s.dossierTemplateId in (:dossierTemplateIds) group by s order by s.rank ASC")
List<DossierStatusInfo> getAllDossierStatusForDossierTemplate(List<String> dossierTemplateIds);
@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 group by s")
"s.description, s.color, s.dossierTemplateId, s.rank, count(d)) from DossierStatusEntity s left outer join s.dossiers d where s.id = :dossierStatusId group by s")
Optional<DossierStatusInfo> findProjectionById(String dossierStatusId);
@Modifying
@Query("update DossierStatusEntity d set d.rank = :newRank where d.id = :dossierStatusId")
void updateRank(String dossierStatusId, int newRank);
@Modifying
@Query("update DossierStatusEntity d set d.rank = d.rank + 1 where d.dossierTemplateId = :dossierTemplateId and d.rank >= :rank")
void adjustRanksForDossierTemplate(String dossierTemplateId, int rank);
@Query("select count(d) from DossierStatusEntity d where d.dossierTemplateId = :dossierTemplateId and d.rank = :rankToCheck")
int getDuplicateRanks(String dossierTemplateId, int rankToCheck);
}

View File

@ -0,0 +1,12 @@
databaseChangeLog:
- changeSet:
id: added-rank-dossier-status.changelog
author: corina
changes:
- addColumn:
columns:
- column:
name: rank
type: INTEGER
defaultValue: 0
tableName: dossier_status

View File

@ -27,6 +27,8 @@ databaseChangeLog:
file: db/changelog/11-added-dictionary_false_positive_tables.changelog.yaml
- include:
file: db/changelog/12-dossier-visibility.changelog.yaml
- include:
file: db/changelog/12-added-rank-dossier-status.changelog.yaml
- include:
file: db/changelog/13-file-manual-change-date.changelog.yaml
- include:

View File

@ -38,7 +38,7 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest {
assertThat(allDossierStatus.size()).isZero();
// Create
// Create first state
CreateOrUpdateDossierStatusRequest crudsr = new CreateOrUpdateDossierStatusRequest();
crudsr.setName("name1");
crudsr.setDescription("description1");
@ -47,13 +47,16 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest {
var loadedDossierStatus = dossierStatusClient.createOrUpdateDossierStatus(crudsr);
assertThat(loadedDossierStatus).isNotNull();
assertThat(loadedDossierStatus.getDossierCount()).isNull();
assertThat(loadedDossierStatus.getRank()).isEqualTo(crudsr.getRank());
// update
// update first state
crudsr.setDossierStatusId(loadedDossierStatus.getId());
crudsr.setDescription("New Description");
crudsr.setRank(1);
var updatedStatus = dossierStatusClient.createOrUpdateDossierStatus(crudsr);
assertThat(updatedStatus.getDescription()).isEqualTo(crudsr.getDescription());
assertThat(updatedStatus.getDossierCount()).isNull();
assertThat(updatedStatus.getRank()).isEqualTo(crudsr.getRank());
// get all for template id
allDossierStatus = dossierStatusClient.getAllDossierStatusForTemplate(dossierTemplate.getId());
@ -85,13 +88,17 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest {
// Create
CreateOrUpdateDossierStatusRequest crudsr2 = new CreateOrUpdateDossierStatusRequest();
crudsr2.setName("name2");
crudsr2.setDescription("description2");
crudsr2.setName("name3");
crudsr2.setDescription("description3");
crudsr2.setRank(1);
crudsr2.setDossierTemplateId(dossierTemplate.getId());
// create second dossier status
var loadedDossierStatus2 = dossierStatusClient.createOrUpdateDossierStatus(crudsr2);
assertThat(loadedDossierStatus2).isNotNull();
assertThat(loadedDossierStatus2.getRank()).isEqualTo(crudsr2.getRank());
loadedDossierStatus = dossierStatusClient.getDossierStatus(loadedDossierStatus.getId());
assertThat(loadedDossierStatus.getRank()).isEqualTo(crudsr.getRank() + 1);
allDossierStatus = dossierStatusClient.getAllDossierStatusForTemplate(dossierTemplate.getId());
assertThat(allDossierStatus.size()).isEqualTo(2);