rank for 3.3.x
This commit is contained in:
parent
1a5fe56ea3
commit
1b20e4e387
@ -19,5 +19,7 @@ public class CreateOrUpdateDossierStatusRequest {
|
||||
|
||||
private String color;
|
||||
|
||||
private int rank;
|
||||
|
||||
private String dossierTemplateId;
|
||||
}
|
||||
|
||||
@ -22,6 +22,7 @@ public class DossierStatusInfo {
|
||||
private String description;
|
||||
private String color;
|
||||
private String dossierTemplateId;
|
||||
private int rank;
|
||||
private Long dossierCount;
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
@ -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:
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user