Create exception for file deletion.

Add user/inscriptionrequest connection to StorageFile entity.
Create a prototype of the delete for file function
This commit is contained in:
LeoMoulin 2024-03-11 20:23:45 +01:00
parent d4c48ee9f1
commit ab91a39a63
6 changed files with 57 additions and 11 deletions

View File

@ -23,7 +23,7 @@ public class StorageController {
@PostMapping("/upload/{fileType}") @PostMapping("/upload/{fileType}")
public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file, @PathVariable FileType fileType) { public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file, @PathVariable FileType fileType) {
String path = storageServ.store(file,fileType); String path = storageServ.store(file,fileType, null, null);
if (path == null) return new ResponseEntity<>("issue with the file storage", HttpStatus.BAD_REQUEST); if (path == null) return new ResponseEntity<>("issue with the file storage", HttpStatus.BAD_REQUEST);

View File

@ -0,0 +1,4 @@
package ovh.herisson.Clyde.Exceptions;
public class CouldntDeleteFileException extends Exception{
}

View File

@ -3,11 +3,14 @@ package ovh.herisson.Clyde.Services;
import org.springframework.core.io.UrlResource; import org.springframework.core.io.UrlResource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import ovh.herisson.Clyde.Exceptions.CouldntDeleteFileException;
import ovh.herisson.Clyde.Repositories.FileRepository; import ovh.herisson.Clyde.Repositories.FileRepository;
import ovh.herisson.Clyde.Tables.FileType; import ovh.herisson.Clyde.Tables.*;
import ovh.herisson.Clyde.Tables.StorageFile;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
@ -27,7 +30,7 @@ public class StorageService {
} }
public String store(MultipartFile file, FileType fileType) { public String store(MultipartFile file, FileType fileType, User user, InscriptionRequest request) {
if (file.getOriginalFilename().isEmpty()){return null;} if (file.getOriginalFilename().isEmpty()){return null;}
@ -49,8 +52,20 @@ public class StorageService {
String url = this.rootLocation.resolve(Paths.get(Objects.requireNonNull(stringUuid))) String url = this.rootLocation.resolve(Paths.get(Objects.requireNonNull(stringUuid)))
.normalize().toString(); .normalize().toString();
fileRepo.save(new StorageFile(file.getName(),url, fileType)); fileRepo.save(new StorageFile(file.getName(),url, fileType, user, request));
return url; return url;
} }
public void delete(StorageFile file) throws CouldntDeleteFileException {
File f = new File(file.getUrl());
//Delete le fichier
try{
f.delete();
} catch (Exception e) {
throw new CouldntDeleteFileException();
}
//Delete l'entité
fileRepo.delete(file);
}
} }

View File

@ -4,7 +4,10 @@ import jakarta.persistence.*;
import java.util.Date; import java.util.Date;
@Entity
public class InscriptionRequest { public class InscriptionRequest {
@Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.AUTO)
private int id; private int id;
private String firstName; private String firstName;

View File

@ -20,7 +20,7 @@ public class ReinscriptionRequest {
//Permet de différencier les demandes de changement et une réinscription dans le même cursus //Permet de différencier les demandes de changement et une réinscription dans le même cursus
//Pour la réinscription on va le mettre a 0 //Pour la réinscription on va le mettre a 0
private boolean type; private boolean type = false;
public ReinscriptionRequest(){} public ReinscriptionRequest(){}

View File

@ -1,9 +1,6 @@
package ovh.herisson.Clyde.Tables; package ovh.herisson.Clyde.Tables;
import jakarta.persistence.Entity; import jakarta.persistence.*;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity @Entity
@ -20,10 +17,21 @@ public class StorageFile {
private FileType fileType; private FileType fileType;
public StorageFile(String name, String url, FileType fileType){ //Pour lier un user ou une demande d'inscription au fichier
@ManyToOne
@JoinColumn(name = "user")
private User user;
@ManyToOne
@JoinColumn(name = "inscriptionrequest")
private InscriptionRequest request;
public StorageFile(String name, String url, FileType fileType, User user, InscriptionRequest request){
this.name = name; this.name = name;
this.url = url; this.url = url;
this.fileType = fileType; this.fileType = fileType;
this.user = user;
this.request = request;
} }
public StorageFile(){} public StorageFile(){}
@ -60,4 +68,20 @@ public class StorageFile {
public void setFileType(FileType fileType) { public void setFileType(FileType fileType) {
this.fileType = fileType; this.fileType = fileType;
} }
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
public void setRequest(InscriptionRequest request) {
this.request = request;
}
public InscriptionRequest getRequest() {
return request;
}
} }