diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java index f99a6f406..3abeaba7b 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java @@ -13,6 +13,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; +import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; @@ -66,6 +68,7 @@ public class ReportTemplateController implements ReportTemplateResource { private final PlaceholderClient placeholderClient; private final AuditPersistenceService auditPersistenceService; private final DossierAttributeConfigPersistenceService dossierAttributeConfigPersistenceService; + private final DossierTemplatePersistenceService dossierTemplatePersistenceService; private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; private final StorageService storageService; private final ReportTemplatePersistenceService reportTemplatePersistenceService; @@ -96,9 +99,12 @@ public class ReportTemplateController implements ReportTemplateResource { try { if (file.getOriginalFilename() != null) { + dossierTemplatePersistenceService.checkDossierTemplateExistsOrElseThrow404(dossierTemplateId); + + var cleanupName = FilenameUtils.getName(file.getOriginalFilename()); ReportTemplateUploadRequest reportTemplateUploadRequest = ReportTemplateUploadRequest.builder() .template(file.getBytes()) - .fileName(file.getOriginalFilename()) + .fileName(cleanupName) .dossierTemplateId(dossierTemplateId) .activeByDefault(activeByDefault) .multiFileReport(multiFileReport) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java index b69d253d9..fd0f45b48 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java @@ -7,6 +7,7 @@ import java.util.Optional; import java.util.UUID; import org.apache.commons.lang3.StringUtils; + import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -104,6 +105,7 @@ public class DossierTemplatePersistenceService { } } + public void validateDossierTemplate(String name, String description) { if (!StringUtils.isEmpty(name) && name.length() > MAX_NAME_LENGTH) { @@ -123,6 +125,7 @@ public class DossierTemplatePersistenceService { return dossierTemplateRepository.existsByNameAndIdNot(templateName, dossierTemplateIdToIgnore); } + @Transactional public boolean isDossierTemplateNameNotUnique(String templateName) { @@ -150,7 +153,8 @@ public class DossierTemplatePersistenceService { } var now = OffsetDateTime.now(); - boolean isNotInRange = !now.isAfter(dossierTemplate.getValidFrom() != null ? dossierTemplate.getValidFrom() : OffsetDateTime.MIN) || !now.isBefore(dossierTemplate.getValidTo() != null ? dossierTemplate.getValidTo() : OffsetDateTime.MAX); + boolean isNotInRange = !now.isAfter(dossierTemplate.getValidFrom() != null ? dossierTemplate.getValidFrom() : OffsetDateTime.MIN) || + !now.isBefore(dossierTemplate.getValidTo() != null ? dossierTemplate.getValidTo() : OffsetDateTime.MAX); if (isNotInRange) { return DossierTemplateStatus.INACTIVE; } @@ -180,6 +184,14 @@ public class DossierTemplatePersistenceService { } + public void checkDossierTemplateExistsOrElseThrow404(String dossierTemplateId) { + + if (!dossierTemplateRepository.existsByIdAndNotDeleted(dossierTemplateId)) { + throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId)); + } + } + + @Transactional public List getTypesForDossierTemplate(String dossierTemplateId) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierTemplateRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierTemplateRepository.java index 1e1670d85..faf834674 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierTemplateRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierTemplateRepository.java @@ -18,8 +18,14 @@ public interface DossierTemplateRepository extends JpaRepository findByIdAndNotDeleted(@Param("dossierTemplateId") String dossierTemplateId); + + @Query("select case when exists (select 1 from DossierTemplateEntity d where d.id = :dossierTemplateId and d.softDeleteTime is null) then true else false end") + boolean existsByIdAndNotDeleted(@Param("dossierTemplateId") String dossierTemplateId); + + boolean existsByName(String name); + boolean existsByNameAndIdNot(String name, String id); }