RED-3240 - Dossier Status
- add new entity DossierStatusEntity, add crud operations - update DossierEntity to add dossierStatus
This commit is contained in:
parent
713d1fc5bc
commit
2a4ac35d78
@ -46,5 +46,6 @@ public class CreateOrUpdateDossierRequest {
|
||||
|
||||
private String requestingUser;
|
||||
|
||||
private String dossierStatusId;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class CreateOrUpdateDossierStatusRequest {
|
||||
|
||||
private String dossierStatusId;
|
||||
|
||||
private String name;
|
||||
|
||||
private String description;
|
||||
|
||||
private String dossierTemplateId;
|
||||
}
|
||||
@ -36,5 +36,6 @@ public class Dossier {
|
||||
private OffsetDateTime dueDate;
|
||||
private OffsetDateTime archivedTime;
|
||||
private String dossierTemplateId;
|
||||
private String dossierStatusId;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,26 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplate;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class DossierStatusInfo {
|
||||
|
||||
@JsonProperty("dossierStatusId")
|
||||
private String id;
|
||||
private String name;
|
||||
private String description;
|
||||
private String dossierTemplateId;
|
||||
// private DossierTemplate dossierTemplate;
|
||||
// private List<Dossier> dossierList = new ArrayList<>();
|
||||
}
|
||||
@ -0,0 +1,46 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.resources;
|
||||
|
||||
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 org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface DossierStatusResource {
|
||||
|
||||
String DOSSIER_STATUS_PATH = "/dossier-status";
|
||||
|
||||
String DOSSIER_TEMPLATE_ID = "dossierTemplateId";
|
||||
String DOSSIER_TEMPLATE_ID_PATH_VARIABLE = "/{" + DOSSIER_TEMPLATE_ID + "}";
|
||||
|
||||
String DOSSIER_STATUS_ID = "dossierStatusId";
|
||||
String DOSSIER_STATUS_ID_PATH_VARIABLE = "/{" + DOSSIER_STATUS_ID + "}";
|
||||
|
||||
@ResponseBody
|
||||
@ResponseStatus(HttpStatus.ACCEPTED)
|
||||
@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_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
List<DossierStatusInfo> getAllDossierStatusForTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId);
|
||||
|
||||
@ResponseBody
|
||||
@ResponseStatus(value = HttpStatus.OK)
|
||||
@GetMapping(value = DOSSIER_STATUS_PATH + DOSSIER_STATUS_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
DossierStatusInfo getDossierStatus(@PathVariable(DOSSIER_STATUS_ID) String dossierStatusId);
|
||||
|
||||
@ResponseBody
|
||||
@ResponseStatus(value = HttpStatus.NO_CONTENT)
|
||||
@DeleteMapping(value = DOSSIER_STATUS_PATH + DOSSIER_STATUS_ID_PATH_VARIABLE)
|
||||
void deleteDossierStatus(@PathVariable(DOSSIER_STATUS_ID) String dossierStatusId);
|
||||
|
||||
}
|
||||
@ -98,4 +98,11 @@ public class DossierEntity {
|
||||
@OneToMany(cascade = CascadeType.ALL, mappedBy = "dossier")
|
||||
private List<DossierAttributeEntity> dossierAttributes = new ArrayList<>();
|
||||
|
||||
@JsonIgnore
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
private DossierStatusEntity dossierStatus;
|
||||
|
||||
@Column(updatable = false, insertable = false, name = "dossier_status_id")
|
||||
private String dossierStatusId;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,41 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.entity.dossier;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Entity
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table(name = "dossier_status")
|
||||
public class DossierStatusEntity {
|
||||
|
||||
@Id
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
private String name;
|
||||
|
||||
@Column
|
||||
private String description;
|
||||
// un dossierTemplate, ( dossierTemplate are o lista de DossierStatus -> one to many )
|
||||
@JsonIgnore
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
private DossierTemplateEntity dossierTemplate;
|
||||
|
||||
@Column(updatable = false, insertable = false, name = "dossier_template_id")
|
||||
private String dossierTemplateId;
|
||||
|
||||
//// si o lista de dossiers care sunt in acest status ( 0..n)
|
||||
// @JsonIgnore
|
||||
// @OneToMany(mappedBy = "dossierStatus")
|
||||
// private List<DossierEntity> dossiers = new ArrayList<>();
|
||||
}
|
||||
@ -87,4 +87,8 @@ public class DossierTemplateEntity {
|
||||
@Transient
|
||||
private DossierTemplateStatus dossierTemplateStatus;
|
||||
|
||||
@JsonIgnore
|
||||
@OneToMany(mappedBy = "dossierTemplate")
|
||||
private List<DossierStatusEntity> dossierStatusList = new ArrayList<>();
|
||||
|
||||
}
|
||||
|
||||
@ -34,6 +34,7 @@ public class DossierPersistenceService {
|
||||
private final FileRepository fileRepository;
|
||||
private final DossierTemplateRepository dossierTemplateRepository;
|
||||
private final ReportTemplateRepository reportTemplateRepository;
|
||||
private final DossierStatusPersistenceService dossierStatusPersistenceService;
|
||||
|
||||
|
||||
public DossierEntity insert(CreateOrUpdateDossierRequest createOrUpdateDossierRequest) {
|
||||
@ -45,6 +46,10 @@ public class DossierPersistenceService {
|
||||
dossier.setDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
dossier.setDossierTemplate(dossierTemplateRepository.getOne(createOrUpdateDossierRequest.getDossierTemplateId()));
|
||||
if(createOrUpdateDossierRequest.getDossierStatusId() != null) {
|
||||
//TODO: make other verifications that the dossierStatus matches the dossierTemplateId?
|
||||
dossier.setDossierStatus(dossierStatusPersistenceService.getDossierStatus(createOrUpdateDossierRequest.getDossierStatusId()));
|
||||
}
|
||||
var reportTemplates = reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds());
|
||||
reportTemplates.forEach(r -> r.getDossiers().add(dossier));
|
||||
dossier.setReportTemplates(reportTemplates);
|
||||
@ -71,6 +76,9 @@ public class DossierPersistenceService {
|
||||
}
|
||||
});
|
||||
dossier.setReportTemplates(reportTemplates);
|
||||
if (createOrUpdateDossierRequest.getDossierStatusId() != null) {
|
||||
dossier.setDossierStatus(dossierStatusPersistenceService.getDossierStatus(createOrUpdateDossierRequest.getDossierStatusId()));
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,63 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
|
||||
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierStatusEntity;
|
||||
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 lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class DossierStatusPersistenceService {
|
||||
|
||||
public static final String DOSSIER_STATUS_NOT_FOUND_MESSAGE = "Dossier Status with Id %s not found.";
|
||||
|
||||
private final DossierStatusRepository dossierStatusRepository;
|
||||
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
|
||||
|
||||
@Transactional
|
||||
public DossierStatusEntity createOrUpdateDossierStatus(CreateOrUpdateDossierStatusRequest createOrUpdateDossierStatusRequest) {
|
||||
if (createOrUpdateDossierStatusRequest.getDossierStatusId() != null) { //update
|
||||
Optional<DossierStatusEntity> dossierStatus = dossierStatusRepository.findById(createOrUpdateDossierStatusRequest.getDossierStatusId());
|
||||
if (dossierStatus.isPresent()) {
|
||||
|
||||
BeanUtils.copyProperties(createOrUpdateDossierStatusRequest, dossierStatus.get());
|
||||
return dossierStatus.get();
|
||||
} else {
|
||||
throw new NotFoundException(String.format(DOSSIER_STATUS_NOT_FOUND_MESSAGE, createOrUpdateDossierStatusRequest.getDossierStatusId()));
|
||||
}
|
||||
} else {
|
||||
DossierStatusEntity dossierStatus = new DossierStatusEntity();
|
||||
dossierStatus.setId(UUID.randomUUID().toString());
|
||||
BeanUtils.copyProperties(createOrUpdateDossierStatusRequest, dossierStatus);
|
||||
var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(createOrUpdateDossierStatusRequest.getDossierTemplateId());
|
||||
var loadedDossierStatus = dossierStatusRepository.save(dossierStatus);
|
||||
loadedDossierStatus.setDossierTemplate(dossierTemplate);
|
||||
|
||||
return loadedDossierStatus;
|
||||
}
|
||||
}
|
||||
|
||||
public List<DossierStatusEntity> getAllDossierStatus() {
|
||||
return dossierStatusRepository.findAll();
|
||||
}
|
||||
|
||||
public List<DossierStatusEntity> getAllDossierStatusForTemplate(String dossierTemplateId) {
|
||||
return dossierStatusRepository.getAllDossierStatusForDossierTemplate(dossierTemplateId);
|
||||
}
|
||||
|
||||
public DossierStatusEntity getDossierStatus(String dossierStatusId) {
|
||||
return dossierStatusRepository.findById(dossierStatusId).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_STATUS_NOT_FOUND_MESSAGE, dossierStatusId)));
|
||||
}
|
||||
|
||||
public void deleteDossierStatus(String dossierStatusId) {
|
||||
dossierStatusRepository.deleteById(dossierStatusId);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
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 org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface DossierStatusRepository extends JpaRepository<DossierStatusEntity, String> {
|
||||
|
||||
@Query("select s from DossierStatusEntity s where s.dossierTemplateId = :dossierTemplateId")
|
||||
List<DossierStatusEntity> getAllDossierStatusForDossierTemplate(String dossierTemplateId);
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
package com.iqser.red.service.peristence.v1.server.controller;
|
||||
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierStatusPersistenceService;
|
||||
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 com.iqser.red.service.persistence.service.v1.api.resources.DossierStatusResource;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class DossierStatusController implements DossierStatusResource {
|
||||
|
||||
private final DossierStatusPersistenceService dossierStatusPersistenceService;
|
||||
@Override
|
||||
public DossierStatusInfo createOrUpdateDossierStatus(CreateOrUpdateDossierStatusRequest dossierStatusRequest) {
|
||||
return convert(dossierStatusPersistenceService.createOrUpdateDossierStatus(dossierStatusRequest), DossierStatusInfo.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DossierStatusInfo> getAllDossierStatus() {
|
||||
|
||||
return convert(dossierStatusPersistenceService.getAllDossierStatus(), DossierStatusInfo.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DossierStatusInfo> getAllDossierStatusForTemplate(String dossierTemplateId) {
|
||||
return convert(dossierStatusPersistenceService.getAllDossierStatus(), DossierStatusInfo.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DossierStatusInfo getDossierStatus(String dossierStatusId) {
|
||||
|
||||
return convert(dossierStatusPersistenceService.getDossierStatus(dossierStatusId), DossierStatusInfo.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteDossierStatus(String dossierStatusId) {
|
||||
dossierStatusPersistenceService.deleteDossierStatus(dossierStatusId);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,64 @@
|
||||
databaseChangeLog:
|
||||
- changeSet:
|
||||
id: dossier-status-1
|
||||
author: generated
|
||||
changes:
|
||||
- createTable:
|
||||
columns:
|
||||
- column:
|
||||
constraints:
|
||||
nullable: false
|
||||
primaryKey: true
|
||||
primaryKeyName: dossier_status_pkey
|
||||
name: id
|
||||
type: VARCHAR(255)
|
||||
- column:
|
||||
name: name
|
||||
type: VARCHAR(255)
|
||||
- column:
|
||||
name: descriptiom
|
||||
type: VARCHAR(255)
|
||||
- column:
|
||||
name: dossier_template_id
|
||||
type: VARCHAR(255)
|
||||
tableName: dossier_status
|
||||
- changeSet:
|
||||
id: dossier-status-2
|
||||
author:
|
||||
changes:
|
||||
- addColumn:
|
||||
columns:
|
||||
- column:
|
||||
name: dossier_status_id
|
||||
type: VARCHAR(255)
|
||||
tableName: dossier
|
||||
- changeSet:
|
||||
id: dossier-status-3
|
||||
author: generated
|
||||
changes:
|
||||
- addForeignKeyConstraint:
|
||||
baseColumnNames: dossier_template_id
|
||||
baseTableName: dossier_status
|
||||
constraintName: dossier_status_dossier_template_id
|
||||
deferrable: false
|
||||
initiallyDeferred: false
|
||||
onDelete: NO ACTION
|
||||
onUpdate: NO ACTION
|
||||
referencedColumnNames: id
|
||||
referencedTableName: dossier_template
|
||||
validate: true
|
||||
- changeSet:
|
||||
id: dossier-status-4
|
||||
author: generated
|
||||
changes:
|
||||
- addForeignKeyConstraint:
|
||||
baseColumnNames: dossier_status_id
|
||||
baseTableName: dossier
|
||||
constraintName: dossier_dossier_status
|
||||
deferrable: false
|
||||
initiallyDeferred: false
|
||||
onDelete: NO ACTION
|
||||
onUpdate: NO ACTION
|
||||
referencedColumnNames: id
|
||||
referencedTableName: dossier_status
|
||||
validate: true
|
||||
@ -7,3 +7,5 @@ databaseChangeLog:
|
||||
file: db/changelog/3-added-annotation-modification-date.changelog.yaml
|
||||
- include:
|
||||
file: db/changelog/4-archived-dossier.changelog.yaml
|
||||
- include:
|
||||
file: db/changelog/5-dossier-status-table.changelog.yaml
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
package com.iqser.red.service.peristence.v1.server.integration.client;
|
||||
|
||||
import com.iqser.red.service.persistence.service.v1.api.resources.DossierStatusResource;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
|
||||
@FeignClient(name = "DossierStatusClient", url = "http://localhost:${server.port}")
|
||||
public interface DossierStatusClient extends DossierStatusResource {
|
||||
}
|
||||
@ -0,0 +1,40 @@
|
||||
package com.iqser.red.service.peristence.v1.server.integration.tests;
|
||||
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.DossierStatusClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class DossierStatusTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
@Autowired
|
||||
private DossierStatusClient dossierStatusClient;
|
||||
|
||||
@Autowired
|
||||
private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider;
|
||||
|
||||
@Test
|
||||
public void testDossierStatus() {
|
||||
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||
|
||||
var allDossierStatus = dossierStatusClient.getAllDossierStatus();
|
||||
|
||||
assertThat(allDossierStatus.size()).isZero();
|
||||
|
||||
CreateOrUpdateDossierStatusRequest cru = new CreateOrUpdateDossierStatusRequest();
|
||||
cru.setName("name1");
|
||||
cru.setDescription("description1");
|
||||
cru.setDossierTemplateId(dossierTemplate.getId());
|
||||
|
||||
var loadedDossierStatus = dossierStatusClient.createOrUpdateDossierStatus(cru);
|
||||
assertThat(loadedDossierStatus).isNotNull();
|
||||
|
||||
allDossierStatus = dossierStatusClient.getAllDossierStatus();
|
||||
assertThat(allDossierStatus.size()).isEqualTo(1);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user