Skip to content

Commit

Permalink
fix: softdelete on file and reduce infinite loop frequency on error
Browse files Browse the repository at this point in the history
  • Loading branch information
Fabien committed Apr 25, 2024
1 parent 2595989 commit 5a1d90f
Show file tree
Hide file tree
Showing 36 changed files with 278 additions and 456 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
import fr.dossierfacile.common.utils.LocalDateTimeTypeAdapter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.web.client.RestTemplate;

import java.time.LocalDateTime;
import java.util.Optional;
import java.util.concurrent.Executor;

@Configuration
Expand Down Expand Up @@ -43,4 +45,9 @@ public Gson gson() {
builder.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeTypeAdapter());
return builder.create();
}

@Bean
public AuditorAware<String> auditorAware() {
return (() -> Optional.of("api-tenant"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,14 @@
import fr.dossierfacile.common.entity.Document;
import fr.dossierfacile.common.entity.File;
import fr.dossierfacile.common.entity.Person;
import fr.dossierfacile.common.entity.StorageFile;
import fr.dossierfacile.common.entity.Tenant;
import fr.dossierfacile.common.enums.DocumentCategory;
import fr.dossierfacile.common.enums.DocumentStatus;
import fr.dossierfacile.common.enums.TenantFileStatus;
import fr.dossierfacile.common.model.log.EditionType;
import fr.dossierfacile.common.repository.DocumentAnalysisReportRepository;
import fr.dossierfacile.common.repository.StorageFileRepository;
import fr.dossierfacile.common.service.interfaces.DocumentHelperService;
import fr.dossierfacile.common.service.interfaces.FileStorageService;
import fr.dossierfacile.common.service.interfaces.LogService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -42,7 +41,7 @@ public class DocumentServiceImpl implements DocumentService {

private final DocumentRepository documentRepository;
private final DocumentAnalysisReportRepository documentAnalysisReportRepository;
private final StorageFileRepository storageFileRepository;
private final FileStorageService fileStorageService;
private final TenantStatusService tenantStatusService;
private final ApartmentSharingService apartmentSharingService;
private final DocumentHelperService documentHelperService;
Expand Down Expand Up @@ -112,7 +111,7 @@ public void resetValidatedDocumentsStatusOfSpecifiedCategoriesToToProcess(List<D
if (document.getDocumentStatus().equals(DocumentStatus.VALIDATED)
&& categoriesToChange.contains(document.getDocumentCategory())) {
if (Boolean.TRUE == document.getNoDocument() && document.getWatermarkFile() != null){
storageFileRepository.delete(document.getWatermarkFile());
fileStorageService.delete(document.getWatermarkFile());
document.setWatermarkFile(null);
}
TransactionalUtil.afterCommit(() -> {
Expand Down Expand Up @@ -148,8 +147,7 @@ public void markDocumentAsEdited(Document document) {
document.setDocumentAnalysisReport(null);
}
if ( document.getWatermarkFile() != null ){
StorageFile watermarkFile = document.getWatermarkFile();
storageFileRepository.delete(watermarkFile);
fileStorageService.delete(document.getWatermarkFile());
document.setWatermarkFile(null);
}
documentRepository.save(document);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import fr.dossierfacile.common.entity.StorageFile;
import fr.dossierfacile.common.entity.WatermarkDocument;
import fr.dossierfacile.common.enums.FileStatus;
import fr.dossierfacile.common.repository.StorageFileRepository;
import fr.dossierfacile.common.repository.WatermarkDocumentRepository;
import fr.dossierfacile.common.service.interfaces.EncryptionKeyService;
import fr.dossierfacile.common.service.interfaces.FileStorageService;
Expand Down Expand Up @@ -39,7 +38,6 @@ public class DocumentServiceImpl implements DocumentService {
private static final String DOCUMENT_NOT_EXIST = "The document does not exist";
private final Producer producer;
private final FileStorageService fileStorageService;
private final StorageFileRepository storageFileRepository;
private final EncryptionKeyService encryptionKeyService;
private final WatermarkDocumentRepository watermarkDocumentRepository;

Expand Down Expand Up @@ -130,9 +128,7 @@ private void cleanData(WatermarkDocument document) {
document.setPdfFile(null);
document.setPdfStatus(FileStatus.DELETED);
watermarkDocumentRepository.save(document);
if (pdfFile != null) {
storageFileRepository.delete(pdfFile);
}
fileStorageService.delete(pdfFile);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import fr.dossierfacile.common.entity.Tenant;
import fr.dossierfacile.common.enums.DocumentStatus;
import fr.dossierfacile.common.enums.DocumentSubCategory;
import fr.dossierfacile.common.repository.StorageFileRepository;
import fr.dossierfacile.common.service.interfaces.FileStorageService;
import fr.gouv.bo.amqp.Producer;
import fr.gouv.bo.dto.MessageDTO;
Expand All @@ -29,7 +28,6 @@ public class DocumentService {

private final DocumentRepository documentRepository;
private final FileStorageService fileStorageService;
private final StorageFileRepository storageFileRepository;
private final Producer producer;
private final DocumentDeniedOptionsRepository documentDeniedOptionsRepository;

Expand Down Expand Up @@ -81,9 +79,7 @@ public void initializeFieldsToProcessPdfGeneration(Document document) {
StorageFile watermarkFile = document.getWatermarkFile();
document.setWatermarkFile(null);
documentRepository.save(document);
if (watermarkFile != null) {
storageFileRepository.delete(watermarkFile);
}
fileStorageService.delete(watermarkFile);
}

@Transactional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,9 @@

import fr.dossierfacile.common.enums.ApplicationType;
import fr.dossierfacile.common.enums.FileStatus;
import fr.dossierfacile.common.enums.FileStorageStatus;
import fr.dossierfacile.common.enums.TenantFileStatus;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand Down Expand Up @@ -64,7 +52,7 @@ public class ApartmentSharing implements Serializable {
@Enumerated(EnumType.STRING)
private ApplicationType applicationType;

@OneToOne(cascade = CascadeType.REMOVE, orphanRemoval = true)
@OneToOne
@JoinColumn(name = "pdf_dossier_file_id")
private StorageFile pdfDossierFile;

Expand All @@ -78,6 +66,12 @@ public class ApartmentSharing implements Serializable {
@OneToMany(mappedBy = "apartmentSharing", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
private List<ApartmentSharingLink> apartmentSharingLinks = new ArrayList<>();

@PreRemove
void deleteCascade() {
if (pdfDossierFile != null)
pdfDossierFile.setStatus(FileStorageStatus.TO_DELETE);
}

public ApartmentSharing(Tenant tenant) {
tenants.add(tenant);
this.applicationType = ApplicationType.ALONE;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,9 @@
import fr.dossierfacile.common.enums.DocumentCategory;
import fr.dossierfacile.common.enums.DocumentStatus;
import fr.dossierfacile.common.enums.DocumentSubCategory;
import fr.dossierfacile.common.enums.FileStorageStatus;
import jakarta.annotation.Nullable;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand Down Expand Up @@ -89,7 +78,7 @@ public class Document implements Serializable {
@Builder.Default
private DocumentStatus documentStatus = DocumentStatus.TO_PROCESS;

@OneToOne(cascade = CascadeType.REMOVE, orphanRemoval = true)
@OneToOne
@JoinColumn(name = "watermark_file_id")
private StorageFile watermarkFile;

Expand All @@ -105,6 +94,12 @@ public class Document implements Serializable {
@OneToOne(mappedBy= "document", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
private DocumentAnalysisReport documentAnalysisReport;

@PreRemove
void deleteCascade() {
if (watermarkFile != null)
watermarkFile.setStatus(FileStorageStatus.TO_DELETE);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
package fr.dossierfacile.common.entity;

import fr.dossierfacile.common.enums.FileStorageStatus;
import jakarta.annotation.Nullable;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToOne;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.Hibernate;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.SoftDelete;

import java.io.Serial;
import java.io.Serializable;
Expand All @@ -40,13 +34,13 @@ public class File implements Serializable {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToOne(cascade = CascadeType.REMOVE)
@OneToOne
@JoinColumn(name = "storage_file_id")
private StorageFile storageFile;

private int numberOfPages;

@OneToOne(cascade = CascadeType.REMOVE)
@OneToOne
@JoinColumn(name = "preview_file_id")
private StorageFile preview;

Expand All @@ -67,6 +61,15 @@ public class File implements Serializable {
@OneToOne(mappedBy= "file", fetch = FetchType.LAZY)
private ParsedFileAnalysis parsedFileAnalysis;

@PreRemove
void deleteCascade() {
if (storageFile != null)
storageFile.setStatus(FileStorageStatus.TO_DELETE);

if (preview != null)
preview.setStatus(FileStorageStatus.TO_DELETE);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@

public enum ObjectStorageProvider {
OVH,
THREEDS_OUTSCALE
THREEDS_OUTSCALE,
LOCAL
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fr.dossierfacile.common.entity;

import fr.dossierfacile.common.entity.shared.AbstractAuditable;
import fr.dossierfacile.common.enums.FileStorageStatus;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
Expand Down Expand Up @@ -45,6 +46,8 @@ public class StorageFile extends AbstractAuditable<String, Long> {
protected String contentType;
protected Long size;
protected String md5;
@Enumerated(EnumType.STRING)
protected FileStorageStatus status;
@Column
@Enumerated(EnumType.STRING)
protected ObjectStorageProvider provider;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,19 +1,8 @@
package fr.dossierfacile.common.entity;

import fr.dossierfacile.common.enums.FileStatus;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
import fr.dossierfacile.common.enums.FileStorageStatus;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand Down Expand Up @@ -58,9 +47,15 @@ public class WatermarkDocument {
@Enumerated(EnumType.STRING)
private FileStatus pdfStatus;

@OneToOne(cascade = CascadeType.REMOVE, orphanRemoval = true)
@OneToOne
@JoinColumn(name = "pdf_file_id")
private StorageFile pdfFile;

private String text;

@PreRemove
void deleteCascade() {
if (pdfFile != null)
pdfFile.setStatus(FileStorageStatus.TO_DELETE);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package fr.dossierfacile.common.enums;

public enum FileStorageStatus {
TO_DELETE,
COPY_FAILED,
DELETE_FAILED,
TEMPORARY; // should not be synchronized
}
Loading

0 comments on commit 5a1d90f

Please sign in to comment.