RED-3246: As an admin I want to clone a dossier template

This commit is contained in:
aoezyetimoglu 2022-03-04 15:03:45 +01:00
parent 1c4012d471
commit 62a0a74abe
4 changed files with 70 additions and 10 deletions

View File

@ -17,6 +17,8 @@ public interface DossierTemplateResource {
String USER_ID_PARAM = "userId";
String NAME_OF_CLONED_TOSSIER_TEMPLATE = "nameOfClonedDossierTemplate";
@ResponseBody
@ResponseStatus(HttpStatus.ACCEPTED)
@PostMapping(value = DOSSIER_TEMPLATE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
@ -37,4 +39,9 @@ public interface DossierTemplateResource {
@DeleteMapping(value = DOSSIER_TEMPLATE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE)
void deleteDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestParam(USER_ID_PARAM) String deletingUserId);
@ResponseBody
@ResponseStatus(HttpStatus.OK)
@PostMapping(value = DOSSIER_TEMPLATE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + "/clone", produces = MediaType.APPLICATION_JSON_VALUE)
DossierTemplate cloneDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestParam(value = NAME_OF_CLONED_TOSSIER_TEMPLATE) String nameOfClonedDossierTemplate, @RequestParam(USER_ID_PARAM) String cloningUserId);
}

View File

@ -1,5 +1,16 @@
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import javax.transaction.Transactional;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
@ -7,17 +18,8 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
@Service
@RequiredArgsConstructor
@ -130,4 +132,29 @@ public class DossierTemplatePersistenceService {
}
public DossierTemplateEntity cloneDossierTemplate(String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) {
validateDossierTemplateNameIsUnique(nameOfClonedDossierTemplate);
DossierTemplateEntity clonedDossierTemplate = new DossierTemplateEntity();
dossierTemplateRepository.findById(dossierTemplateId).ifPresentOrElse((dossierTemplate) -> {
BeanUtils.copyProperties(dossierTemplate, clonedDossierTemplate);
OffsetDateTime now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS);
clonedDossierTemplate.setId(UUID.randomUUID().toString());
clonedDossierTemplate.setName(nameOfClonedDossierTemplate);
clonedDossierTemplate.setCreatedBy(cloningUserId);
clonedDossierTemplate.setModifiedBy(cloningUserId);
clonedDossierTemplate.setDateAdded(now);
clonedDossierTemplate.setDateModified(now);
clonedDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(computeDossierTemplateStatus(clonedDossierTemplate).name()));
dossierTemplateRepository.save(clonedDossierTemplate);
}, () -> {
throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId));
});
return clonedDossierTemplate;
}
}

View File

@ -42,4 +42,9 @@ public class DossierTemplateController implements DossierTemplateResource {
public void deleteDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestParam(USER_ID_PARAM) String deletingUserId) {
dossierTemplatePersistenceService.deleteDossierTemplate(dossierTemplateId, deletingUserId);
}
@Override
public DossierTemplate cloneDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) {
return convert(dossierTemplatePersistenceService.cloneDossierTemplate(dossierTemplateId, nameOfClonedDossierTemplate, cloningUserId), DossierTemplate.class);
}
}

View File

@ -88,5 +88,26 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
}
@Test
public void testCloneDossierTemplate() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
var allTemplates = dossierTemplateClient.getAllDossierTemplates();
assertThat(allTemplates.size()).isEqualTo(1);
assertThat(allTemplates.get(0)).isEqualTo(dossierTemplate);
var clonedDT = dossierTemplateClient.cloneDossierTemplate(dossierTemplate.getId(), "Clone of " + dossierTemplate.getName(), "user");
assertThat(clonedDT.getName()).isEqualTo("Clone of " + dossierTemplate.getName());
var loadedTemplate = dossierTemplateClient.getDossierTemplate(clonedDT.getId());
assertThat(loadedTemplate).isEqualTo(clonedDT);
assertThat(loadedTemplate.getId()).isEqualTo(clonedDT.getId());
assertThat(loadedTemplate.getDescription()).isEqualTo(dossierTemplate.getDescription());
assertThat(loadedTemplate.getValidFrom()).isEqualTo(dossierTemplate.getValidFrom());
assertThat(loadedTemplate.getValidTo()).isEqualTo(dossierTemplate.getValidTo());
assertThat(loadedTemplate.getDownloadFileTypes()).isEqualTo(dossierTemplate.getDownloadFileTypes());
assertThat(loadedTemplate.getModifiedBy()).isEqualTo("user");
assertThat(loadedTemplate.getCreatedBy()).isEqualTo("user");
}
}