diff --git a/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java b/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java index d906e75..7ed7633 100644 --- a/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java +++ b/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java @@ -163,7 +163,10 @@ public class PhotoController { model.addAttribute("partages", partageService.getPartagesForPhoto(id)); - + boolean isOwner = auth != null && + photo.getProprietaire() != null && + auth.getName().equals(photo.getProprietaire().getEmail()); + model.addAttribute("isOwner", isOwner); return "photo-detail"; } @@ -230,6 +233,21 @@ public class PhotoController { return ResponseEntity.ok().contentType(MediaType.IMAGE_JPEG).body(r); } + /* ========================== SUPPRESSION PHOTO ========================== */ + @PostMapping("/photo/{id}/delete") + @PreAuthorize("@securityService.canAccessPhoto(authentication, #id)") + public String deletePhoto( + @PathVariable Long id, + Authentication auth) { + PhotoDTO p = photoService.getPhotoById(id); + if (p == null || !p.getProprietaire().getEmail().equals(auth.getName())) { + return "redirect:/mes-photos?error=forbidden"; + } + photoService.deletePhoto(id); + return "redirect:/mes-photos?deleted"; + } + + } \ No newline at end of file diff --git a/src/main/java/local/epul4a/fotosharing/model/Album.java b/src/main/java/local/epul4a/fotosharing/model/Album.java index 66a0c73..4014680 100644 --- a/src/main/java/local/epul4a/fotosharing/model/Album.java +++ b/src/main/java/local/epul4a/fotosharing/model/Album.java @@ -44,6 +44,8 @@ public class Album { private Set partages = new HashSet<>(); + + public enum Visibilite { PRIVATE, SHARED, diff --git a/src/main/java/local/epul4a/fotosharing/model/Photo.java b/src/main/java/local/epul4a/fotosharing/model/Photo.java index ef6872a..58a7896 100644 --- a/src/main/java/local/epul4a/fotosharing/model/Photo.java +++ b/src/main/java/local/epul4a/fotosharing/model/Photo.java @@ -35,6 +35,9 @@ public class Photo { @OneToMany(mappedBy = "photo", cascade = CascadeType.ALL, orphanRemoval = true) private Set partages = new HashSet<>(); + @OneToMany(mappedBy = "photo", cascade = CascadeType.ALL, orphanRemoval = true) + private Set commentaires = new HashSet<>(); + @Column private String uuidThumbnail; } diff --git a/src/main/java/local/epul4a/fotosharing/service/PhotoService.java b/src/main/java/local/epul4a/fotosharing/service/PhotoService.java index 16dfc55..4f0a9fa 100644 --- a/src/main/java/local/epul4a/fotosharing/service/PhotoService.java +++ b/src/main/java/local/epul4a/fotosharing/service/PhotoService.java @@ -19,6 +19,8 @@ public interface PhotoService { Page listSharedWith(String email, int page, int size); Page listSharedPhotos(String email, int page, int size); List listAllPhotosOfUser(String email); + void deletePhoto(Long id); + diff --git a/src/main/java/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.java b/src/main/java/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.java index b106a90..6478337 100644 --- a/src/main/java/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.java +++ b/src/main/java/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.java @@ -1,7 +1,9 @@ package local.epul4a.fotosharing.service.impl; +import jakarta.transaction.Transactional; import local.epul4a.fotosharing.dto.PhotoDTO; import local.epul4a.fotosharing.mapper.PhotoMapper; +import local.epul4a.fotosharing.model.Album; import local.epul4a.fotosharing.model.Partage; import local.epul4a.fotosharing.model.Photo; import local.epul4a.fotosharing.model.Utilisateur; @@ -185,4 +187,28 @@ public class PhotoServiceImpl implements PhotoService { .toList(); } + //============= DELETE PHOTO ============================= + @Override + @Transactional + public void deletePhoto(Long id) { + Photo photo = photoRepository.findById(id) + .orElseThrow(() -> new RuntimeException("Photo introuvable")); + //Retirer la photo de tous ses albums + for (Album album : photo.getAlbums()) { + album.getPhotos().remove(photo); + } + //Supprimer les fichiers (original + miniature) + try { + Path original = Paths.get(uploadDir).resolve(photo.getUuidFichier()); + Path thumb = Paths.get(uploadDir).resolve(photo.getUuidThumbnail()); + Files.deleteIfExists(original); + Files.deleteIfExists(thumb); + } catch (IOException ex) { + throw new RuntimeException("Erreur suppression fichiers", ex); + } + //Supprimer la photo en base & supprime aussi commentaires + partages via cascade + photoRepository.delete(photo); + } + + } \ No newline at end of file diff --git a/src/main/resources/templates/photo-detail.html b/src/main/resources/templates/photo-detail.html index 0683902..9ca2aa5 100644 --- a/src/main/resources/templates/photo-detail.html +++ b/src/main/resources/templates/photo-detail.html @@ -29,6 +29,17 @@
  • Visibilité :
  • Propriétaire :
  • + +
    +
    + + +
    +
    + diff --git a/target/classes/local/epul4a/fotosharing/controller/PhotoController.class b/target/classes/local/epul4a/fotosharing/controller/PhotoController.class index 1e55b35..fada8ab 100644 Binary files a/target/classes/local/epul4a/fotosharing/controller/PhotoController.class and b/target/classes/local/epul4a/fotosharing/controller/PhotoController.class differ diff --git a/target/classes/local/epul4a/fotosharing/model/Album$Visibilite.class b/target/classes/local/epul4a/fotosharing/model/Album$Visibilite.class index 0c108a1..87e6001 100644 Binary files a/target/classes/local/epul4a/fotosharing/model/Album$Visibilite.class and b/target/classes/local/epul4a/fotosharing/model/Album$Visibilite.class differ diff --git a/target/classes/local/epul4a/fotosharing/model/Photo.class b/target/classes/local/epul4a/fotosharing/model/Photo.class index 5b34ff3..807d37e 100644 Binary files a/target/classes/local/epul4a/fotosharing/model/Photo.class and b/target/classes/local/epul4a/fotosharing/model/Photo.class differ diff --git a/target/classes/local/epul4a/fotosharing/service/PhotoService.class b/target/classes/local/epul4a/fotosharing/service/PhotoService.class index a2c5e77..206c8c3 100644 Binary files a/target/classes/local/epul4a/fotosharing/service/PhotoService.class and b/target/classes/local/epul4a/fotosharing/service/PhotoService.class differ diff --git a/target/classes/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.class b/target/classes/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.class index 5d7f3ea..7d45d55 100644 Binary files a/target/classes/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.class and b/target/classes/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.class differ diff --git a/target/classes/templates/photo-detail.html b/target/classes/templates/photo-detail.html index 0683902..9ca2aa5 100644 --- a/target/classes/templates/photo-detail.html +++ b/target/classes/templates/photo-detail.html @@ -29,6 +29,17 @@
  • Visibilité :
  • Propriétaire :
  • + +
    +
    + + +
    +
    +