added transactionl wherever needed to allow updates/deletes without save

This commit is contained in:
Timo Bejan 2021-09-16 08:33:34 +03:00
parent 874569cf76
commit 9bf485b05d
19 changed files with 117 additions and 41 deletions

View File

@ -35,6 +35,4 @@ public class CreateOrUpdateDossierTemplateRequest {
private Set<DownloadFileType> downloadFileTypes = new HashSet<>();
private List<String> reportTemplateIds = new ArrayList<>();
}

View File

@ -58,15 +58,18 @@ public class AddRedactionPersistenceService {
}
@Transactional
public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) {
manualRedactionRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime));
}
@Transactional
public void undelete(String fileId, String annotationId) {
manualRedactionRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null));
}
@Transactional
public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) {
manualRedactionRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> {
@ -77,7 +80,7 @@ public class AddRedactionPersistenceService {
}
@Transactional
public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary) {
manualRedactionRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> {

View File

@ -52,7 +52,7 @@ public class CommentPersistenceService {
commentRepository.deleteById(commentId);
}
@Transactional
public void softDelete(long commentId, OffsetDateTime softDeletedTime) {
commentRepository.findById(commentId).ifPresent(mre -> {
@ -60,6 +60,7 @@ public class CommentPersistenceService {
});
}
@Transactional
public void undelete(long commentId) {
commentRepository.findById(commentId).ifPresent(mre -> {
mre.setSoftDeletedTime(null);

View File

@ -47,10 +47,9 @@ public class DictionaryPersistenceService {
}
@Transactional
public void updateType(String typeId, Type typeValueRequest){
typeRepository.findById(typeId).ifPresent((type) -> {
checkRankAlreadyExists(type.getType(), type.getDossierTemplate().getId(), typeValueRequest.getRank(), type.getDossier() == null ? null : type.getDossier().getId());
BeanUtils.copyProperties(typeValueRequest, type);

View File

@ -27,6 +27,7 @@ public class DossierAttributePersistenceService {
dossierAttributeRepository.save(dossierAttribute);
}
@Transactional
public void updateDossierAttribute(String dossierId, String dossierAttributeId, String dossierAttributeValue) {
dossierAttributeRepository.findById(new DossierAttribute.DossierAttributeId(dossierId, dossierAttributeId)).ifPresent(dossierAttribute -> dossierAttribute.setValue(dossierAttributeValue));

View File

@ -44,6 +44,7 @@ public class DossierPersistenceService {
}
@Transactional
public void update(String dossierId, CreateOrUpdateDossierRequest createOrUpdateDossierRequest) {
dossierRepository.findById(dossierId).ifPresent(dossier -> {
@ -55,6 +56,7 @@ public class DossierPersistenceService {
}
@Transactional
public void updateReportTemplateIds(String dossierId, Set<String> reportTemplateIds) {
dossierRepository.findById(dossierId).ifPresent(dossier -> {
dossier.setReportTemplates(reportTemplateRepository.findAllById(reportTemplateIds));
@ -90,6 +92,7 @@ public class DossierPersistenceService {
}
@Transactional
public void hardDelete(String dossierId) {
dossierRepository.findById(dossierId).ifPresent(dossier -> {
dossier.setHardDeletedTime(OffsetDateTime.now());
@ -99,6 +102,7 @@ public class DossierPersistenceService {
}
@Transactional
public void undelete(String dossierId) {
dossierRepository.findById(dossierId).ifPresent(dossier -> {
dossier.setStatus(DossierStatus.ACTIVE);
@ -107,6 +111,7 @@ public class DossierPersistenceService {
}
@Transactional
public void markDossierAsDeleted(String dossierId, OffsetDateTime softDeletedTime) {
dossierRepository.findById(dossierId).ifPresent(dossier -> {
dossier.setStatus(DossierStatus.DELETED);

View File

@ -1,6 +1,5 @@
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
import com.iqser.red.service.persistence.service.v1.api.model.CreateOrUpdateDossierRequest;
import com.iqser.red.service.persistence.service.v1.api.model.CreateOrUpdateDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierTemplate;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
@ -9,6 +8,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Optional;
@ -24,14 +24,14 @@ public class DossierTemplatePersistenceService {
private final DossierTemplateRepository dossierTemplateRepository;
@Transactional
public DossierTemplate createOrUpdateDossierTemplate(CreateOrUpdateDossierTemplateRequest createOrUpdateDossierRequest) {
if (createOrUpdateDossierRequest.getDossierTemplateId() != null) {
Optional<DossierTemplate> dossierTemplate = dossierTemplateRepository.findById(createOrUpdateDossierRequest.getDossierTemplateId());
if (dossierTemplate.isPresent()) {
dossierTemplate.get().setDateModified(OffsetDateTime.now());
dossierTemplate.get().setModifiedBy(createOrUpdateDossierRequest.getRequestingUser());
BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate.get());
return dossierTemplate.get();
} else {
throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, createOrUpdateDossierRequest.getDossierTemplateId()));
@ -57,6 +57,7 @@ public class DossierTemplatePersistenceService {
return dossierTemplateRepository.findById(dossierTemplateId).filter(d -> !d.isDeleted()).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId)));
}
@Transactional
public void deleteDossierTemplate(String dossierTemplateId, String deletingUserId) {
dossierTemplateRepository.findById(dossierTemplateId).ifPresentOrElse((dossierTemplate) -> {
dossierTemplate.setModifiedBy(deletingUserId);

View File

@ -36,13 +36,14 @@ public class DownloadStatusPersistenceService {
}
@Transactional
public void updateStatus(String storageId, DownloadStatus.DownloadStatusValue status) {
downloadStatusRepository.findById(storageId).ifPresent(downloadStatus -> downloadStatus.setStatus(status));
}
@Transactional
public void updateStatus(String storageId, DownloadStatus.DownloadStatusValue status, long fileSize) {
downloadStatusRepository.findById(storageId).ifPresent(downloadStatus -> {
downloadStatus.setStatus(status);
@ -51,6 +52,7 @@ public class DownloadStatusPersistenceService {
}
@Transactional
public void updateLastDownload(String storageId) {
downloadStatusRepository.findById(storageId).ifPresent(downloadStatus -> {

View File

@ -9,6 +9,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Set;
@ -38,6 +39,7 @@ public class FileStatusPersistenceService {
}
@Transactional
public void updateStatusSuccessful(String fileId, int numberOfPages, FileStatus status,
boolean hasUpdates, long dictionaryVersion, long rulesVersion,
long legalBasisVersion, long duration, long dossierDictionaryVersion,
@ -62,6 +64,7 @@ public class FileStatusPersistenceService {
}
@Transactional
public void updateStatusSuccessful(String fileId, FileStatus status, boolean approval) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -77,6 +80,7 @@ public class FileStatusPersistenceService {
}
@Transactional
public void updateStatus(String fileId, FileStatus status, String uploader) {
if (status.equals(FileStatus.UNASSIGNED) || status.equals(FileStatus.UNPROCESSED)) {
@ -94,7 +98,7 @@ public class FileStatusPersistenceService {
}
@Transactional
public void updateStatus(String fileId, FileStatus status) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
file.setStatus(status);
@ -104,7 +108,7 @@ public class FileStatusPersistenceService {
});
}
@Transactional
public void setUpdateStatusIndexingSuccessful( String fileId, FileStatus status) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -116,7 +120,7 @@ public class FileStatusPersistenceService {
}
@Transactional
public void updateLastOCRTime( String fileId, OffsetDateTime time) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -127,7 +131,7 @@ public class FileStatusPersistenceService {
}
@Transactional
public void updateHasComments(String fileId, boolean hasComments) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -143,7 +147,7 @@ public class FileStatusPersistenceService {
updateLastManualRedaction(fileId, OffsetDateTime.now());
}
@Transactional
public void updateLastManualRedaction(String fileId, OffsetDateTime date) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -154,7 +158,7 @@ public class FileStatusPersistenceService {
}
@Transactional
public void setUpdateLastManualRedactionAndHasSuggestions(String fileId, OffsetDateTime date, boolean hasSuggestions) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -166,7 +170,7 @@ public class FileStatusPersistenceService {
}
@Transactional
public void setFileAttributes(String fileId, List<FileAttribute> fileAttributes) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -177,7 +181,7 @@ public class FileStatusPersistenceService {
});
}
@Transactional
public void setExcludedPages(String fileId, Set<Integer> excludedPages) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -206,7 +210,7 @@ public class FileStatusPersistenceService {
return fileRepository.findAll();
}
@Transactional
public void softDelete(String fileId, OffsetDateTime softDeletedTime) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -219,7 +223,7 @@ public class FileStatusPersistenceService {
}
@Transactional
public void hardDelete(String fileId) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -232,7 +236,7 @@ public class FileStatusPersistenceService {
}
@Transactional
public void undelete(String fileId, FileStatus statusBefore) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -243,7 +247,7 @@ public class FileStatusPersistenceService {
});
}
@Transactional
public void setCurrentReviewer(String fileId, String currentReviewer, String lastReviewer) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -255,7 +259,7 @@ public class FileStatusPersistenceService {
}
@Transactional
public void toggleExclusion(String fileId, boolean excluded) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
@ -279,7 +283,7 @@ public class FileStatusPersistenceService {
}
@Transactional
public void overwriteFile(String fileId, String uploader, String filename) {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {

View File

@ -34,7 +34,7 @@ public class ForceRedactionPersistenceService {
forceRedactionRepository.save(manualForceRedaction);
}
@Transactional
public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) {
forceRedactionRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> {
mre.setProcessedDate(OffsetDateTime.now());
@ -48,10 +48,12 @@ public class ForceRedactionPersistenceService {
forceRedactionRepository.deleteById(new AnnotationId(annotationId, fileId));
}
@Transactional
public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) {
forceRedactionRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime));
}
@Transactional
public void undelete(String fileId, String annotationId) {
forceRedactionRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null));
}

View File

@ -32,7 +32,7 @@ public class ImageRecategorizationPersistenceService {
}
@Transactional
public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) {
imageRecategorizationRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> {
@ -47,11 +47,13 @@ public class ImageRecategorizationPersistenceService {
imageRecategorizationRepository.deleteById(new AnnotationId(annotationId, fileId));
}
@Transactional
public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) {
imageRecategorizationRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime));
}
@Transactional
public void undelete(String fileId, String annotationId) {
imageRecategorizationRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null));
}

View File

@ -38,16 +38,19 @@ public class LegalBasisChangePersistenceService {
}
@Transactional
public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) {
legalBasisChangeRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime));
}
@Transactional
public void undelete(String fileId, String annotationId) {
legalBasisChangeRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null));
}
@Transactional
public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) {
legalBasisChangeRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> {

View File

@ -32,6 +32,7 @@ public class NotificationPersistenceService {
}
@Transactional
public void setSeenDate(String userId, long notificationId, OffsetDateTime seenDate) {
notificationRepository.findByIdAndUserId(notificationId, userId).ifPresentOrElse(notification -> notification.setSeenDate(seenDate), () -> {
@ -40,13 +41,14 @@ public class NotificationPersistenceService {
}
@Transactional
public void setReadDate(String userId, long notificationId, OffsetDateTime readDate) {
notificationRepository.findByIdAndUserId(notificationId, userId).ifPresentOrElse(notification -> notification.setReadDate(readDate), () -> {
throw new NotFoundException("Notification not found");
});
}
@Transactional
public void softDelete(String userId, long notificationId) {
notificationRepository.findByIdAndUserId(notificationId, userId).ifPresentOrElse(notification -> notification.setSoftDeleted(OffsetDateTime.now()), () -> {
throw new NotFoundException("Notification not found");

View File

@ -53,14 +53,17 @@ public class RemoveRedactionPersistenceService {
removeRedactionRepository.deleteById(new AnnotationId(annotationId, fileId));
}
@Transactional
public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) {
removeRedactionRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime));
}
@Transactional
public void undelete(String fileId, String annotationId) {
removeRedactionRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null));
}
@Transactional
public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) {
removeRedactionRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> {
@ -70,6 +73,7 @@ public class RemoveRedactionPersistenceService {
}
@Transactional
public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary) {
removeRedactionRepository.findById(new AnnotationId(annotationId, fileId)).ifPresent(mre -> {

View File

@ -6,6 +6,8 @@ import com.iqser.red.service.persistence.service.v1.api.model.data.configuration
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
@Service
@RequiredArgsConstructor
@SuppressWarnings("PMD.TooManyStaticImports")
@ -20,6 +22,7 @@ public class RulesPersistenceService {
return ruleSetRepository.findById(dossierTemplateId).orElseThrow(() -> new NotFoundException(RULES_NOT_FOUND));
}
@Transactional
public void setRules(String rules, String dossierTemplateId) {
ruleSetRepository.findById(dossierTemplateId).ifPresentOrElse(r -> {

View File

@ -14,13 +14,15 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.*;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@EnableFeignClients(basePackageClasses = AbstractFileManagementServerServiceTest.class)
@Import(AbstractFileManagementServerServiceTest.TestConfiguration.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public abstract class AbstractFileManagementServerServiceTest {
@Autowired

View File

@ -2,6 +2,7 @@ package com.iqser.red.service.file.management.v1.server.integration;
import com.google.common.collect.Sets;
import com.iqser.red.service.file.management.v1.server.controller.*;
import com.iqser.red.service.file.management.v1.server.integration.client.DossierTemplateClient;
import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronOptimizeResponse;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ViewedPagesPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.BinaryFileRequest;
@ -33,7 +34,7 @@ public class End2EndAPITest extends AbstractFileManagementServerServiceTest {
@Autowired
private DossierController dossierController;
@Autowired
private DossierTemplateController dossierTemplateController;
private DossierTemplateClient dossierTemplateClient;
@Autowired
private ViewedPagesPersistenceService viewedPagesPersistenceService;
@Autowired
@ -49,18 +50,9 @@ public class End2EndAPITest extends AbstractFileManagementServerServiceTest {
public void testViewedPages() {
CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest();
cru.setCreatedBy("1");
cru.setDateAdded(OffsetDateTime.now());
cru.setDateModified(OffsetDateTime.now());
cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL));
cru.setName("Template 1");
cru.setDescription("Template 1");
cru.setRequestingUser("1");
cru.setValidFrom(OffsetDateTime.now());
cru.setValidTo(OffsetDateTime.now());
DossierTemplate result = dossierTemplateController.createOrUpdateDossierTemplate(cru);
DossierTemplate dossierTemplate = testDossierTemplate();
CreateOrUpdateDossierRequest request = new CreateOrUpdateDossierRequest();
request.setDate(OffsetDateTime.now());
@ -68,7 +60,7 @@ public class End2EndAPITest extends AbstractFileManagementServerServiceTest {
request.setDossierName("Test Dossier");
request.setOwnerId("1");
request.setStatus(DossierStatus.ACTIVE);
request.setDossierTemplateId(result.getId());
request.setDossierTemplateId(dossierTemplate.getId());
var dossier = dossierController.addDossier(request);
BinaryFileRequest upload = new BinaryFileRequest("test".getBytes(StandardCharsets.UTF_8), "test.pdf", dossier.getId(), "1");
@ -92,5 +84,46 @@ public class End2EndAPITest extends AbstractFileManagementServerServiceTest {
}
public DossierTemplate testDossierTemplate(){
CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest();
cru.setCreatedBy("1");
cru.setDateAdded(OffsetDateTime.now());
cru.setDateModified(OffsetDateTime.now());
cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL));
cru.setName("Template 1");
cru.setDescription("Template 1");
cru.setRequestingUser("1");
cru.setValidFrom(OffsetDateTime.now());
cru.setValidTo(OffsetDateTime.now());
DossierTemplate result = dossierTemplateClient.createOrUpdateDossierTemplate(cru);
assertThat(result.getName()).isEqualTo("Template 1");
DossierTemplate loadedTemplate = dossierTemplateClient.getDossierTemplate(result.getId());
assertThat(loadedTemplate).isEqualTo(result);
List<DossierTemplate> allTemplates = dossierTemplateClient.getAllDossierTemplates();
assertThat(allTemplates.size()).isEqualTo(1);
assertThat(allTemplates.get(0)).isEqualTo(result);
// update
cru.setDossierTemplateId(result.getId());
cru.setName("Template 1 Update");
DossierTemplate updated = dossierTemplateClient.createOrUpdateDossierTemplate(cru);
assertThat(updated.getName()).isEqualTo("Template 1 Update");
loadedTemplate = dossierTemplateClient.getDossierTemplate(result.getId());
assertThat(loadedTemplate).isEqualTo(updated);
return result;
}
}

View File

@ -0,0 +1,8 @@
package com.iqser.red.service.file.management.v1.server.integration.client;
import com.iqser.red.service.persistence.service.v1.api.resources.DossierTemplateResource;
import org.springframework.cloud.openfeign.FeignClient;
@FeignClient(name = "DossierTemplateClient" ,url = "http://localhost:${server.port}")
public interface DossierTemplateClient extends DossierTemplateResource {
}

View File

@ -30,3 +30,6 @@ storage:
endpoint: 'http://localhost:9000'
key: minioadmin
secret: minioadmin
server:
port: 28080