diff --git a/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java b/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java index 9858654..22f0c46 100644 --- a/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java +++ b/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java @@ -11,6 +11,7 @@ import local.epul4a.fotosharing.service.CommentaireService; import local.epul4a.fotosharing.service.PhotoService; import org.springframework.core.io.Resource; import org.springframework.core.io.PathResource; +import org.springframework.data.domain.Page; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -91,24 +92,23 @@ public class PhotoController { } @GetMapping("/mes-photos") - public String mesPhotos(Model model, Authentication authentication) { - String email = authentication.getName(); - // photos que je possède - List mesPhotos = photoService.listByOwner(email); - // photos partagées avec moi - List photosPartagees = photoService.listSharedWith(email); - model.addAttribute("mesPhotos", mesPhotos); - model.addAttribute("photosPartagees", photosPartagees); - + public String mesPhotos(Model model, Authentication auth) { + String email = auth.getName(); + model.addAttribute("photosPrivees", photoService.listPrivatePhotos(email)); + model.addAttribute("photosPubliques", photoService.listPublicPhotos(email)); + model.addAttribute("photosPartagees", photoService.listSharedWith(email)); return "mes-photos"; } @GetMapping("/galerie") - public String galerie(Model model) { - model.addAttribute("photos", photoService.listPublicPhotos()); + public String galerie(@RequestParam(defaultValue = "0") int page, Model model) { + Page photosPage = photoService.listPublic(page, 12); + model.addAttribute("photosPage", photosPage); + model.addAttribute("currentPage", page); return "galerie"; } + @GetMapping("/photo/{id}") @PreAuthorize("@securityService.canAccessPhoto(authentication, #id)") public String viewPhoto(@PathVariable Long id, @@ -127,6 +127,10 @@ public class PhotoController { String currentUser = (auth != null ? auth.getName() : null); model.addAttribute("currentUser", currentUser); + // Liste des partages + List partages = partageRepository.findByPhoto_Id(id); + model.addAttribute("partages", partages); + return "photo-detail"; } @@ -166,6 +170,12 @@ public class PhotoController { return "redirect:/photo/" + id + "?shared=ok"; } + @GetMapping("/photo/{id}/unshare/{email}") + public String unshare(@PathVariable Long id, @PathVariable String email) { + photoService.unshare(id, email); + return "redirect:/photo/" + id; + } + } diff --git a/src/main/java/local/epul4a/fotosharing/repository/PhotoRepository.java b/src/main/java/local/epul4a/fotosharing/repository/PhotoRepository.java index 6fa15df..a7bd93a 100644 --- a/src/main/java/local/epul4a/fotosharing/repository/PhotoRepository.java +++ b/src/main/java/local/epul4a/fotosharing/repository/PhotoRepository.java @@ -1,10 +1,15 @@ package local.epul4a.fotosharing.repository; import local.epul4a.fotosharing.model.Photo; +import org.springframework.data.domain.Page; import org.springframework.data.jpa.repository.JpaRepository; + +import org.springframework.data.domain.Pageable; import java.util.List; public interface PhotoRepository extends JpaRepository { List findByProprietaire_Email(String email); List findByVisibilite(Photo.Visibilite visibilite); + Page findByVisibilite(Photo.Visibilite visibilite, Pageable pageable); + } \ No newline at end of file diff --git a/src/main/java/local/epul4a/fotosharing/service/PhotoService.java b/src/main/java/local/epul4a/fotosharing/service/PhotoService.java index fa34a51..1a8db91 100644 --- a/src/main/java/local/epul4a/fotosharing/service/PhotoService.java +++ b/src/main/java/local/epul4a/fotosharing/service/PhotoService.java @@ -1,6 +1,7 @@ package local.epul4a.fotosharing.service; import local.epul4a.fotosharing.model.Photo; +import org.springframework.data.domain.Page; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.nio.file.Path; @@ -12,6 +13,11 @@ public interface PhotoService { List listByOwner(String email); List listPublicPhotos(); List listSharedWith(String email); + List listPrivatePhotos(String email); + List listPublicPhotos(String email); + void unshare(Long photoId, String email); + Page listPublic(int page, int size); + } 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 af63d93..94e0985 100644 --- a/src/main/java/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.java +++ b/src/main/java/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.java @@ -8,6 +8,9 @@ import local.epul4a.fotosharing.repository.PhotoRepository; import local.epul4a.fotosharing.repository.UtilisateurRepository; import local.epul4a.fotosharing.service.PhotoService; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; @@ -83,4 +86,34 @@ public class PhotoServiceImpl implements PhotoService { .toList(); } + @Override + public List listPrivatePhotos(String email) { + return photoRepository.findByProprietaire_Email(email).stream() + .filter(p -> p.getVisibilite() == Photo.Visibilite.PRIVATE) + .toList(); + } + + @Override + public List listPublicPhotos(String email) { + return photoRepository.findByProprietaire_Email(email).stream() + .filter(p -> p.getVisibilite() == Photo.Visibilite.PUBLIC) + .toList(); + } + + @Override + public void unshare(Long photoId, String email) { + Partage p = partageRepository.findByPhoto_Id(photoId).stream() + .filter(x -> x.getUtilisateur().getEmail().equals(email)) + .findFirst() + .orElse(null); + if (p != null) partageRepository.delete(p); + } + + @Override + public Page listPublic(int page, int size) { + Pageable pageable = PageRequest.of(page, size); + return photoRepository.findByVisibilite(Photo.Visibilite.PUBLIC, pageable); + } + + } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index e4ec83b..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,25 +0,0 @@ -spring.application.name=FotoSharing - -# =============================== -# DATABASE -# =============================== -spring.datasource.url=jdbc:mariadb://192.168.112.10:3306/fotoshareDB -spring.datasource.username=ufoto -spring.datasource.password=4AinfoRep-25 -# =============================== -# JPA / HIBERNATE -# =============================== -spring.jpa.hibernate.ddl-auto=update -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect -spring.jpa.show-sql=true -spring.jpa.properties.hibernate.format_sql=true -spring.thymeleaf.prefix=classpath:/templates/ -spring.thymeleaf.suffix=.html -spring.thymeleaf.mode=HTML -spring.jpa.properties.hibernate.jdbc.time_zone=UTC -# =============================== -# EMPLACEMENT DE STICKAGE -# =============================== -file.upload-dir=/opt/photo-app/uploads -spring.servlet.multipart.max-file-size=20MB -spring.servlet.multipart.max-request-size=20MB \ No newline at end of file diff --git a/src/main/resources/templates/galerie.html b/src/main/resources/templates/galerie.html index ca224d8..8ad3e84 100644 --- a/src/main/resources/templates/galerie.html +++ b/src/main/resources/templates/galerie.html @@ -1,17 +1,40 @@ -Galerie + + + Galerie publique + +

Galerie publique

-

Accueil

+ + + + + -
    -
  • - nom - — - Voir -
  • -
diff --git a/src/main/resources/templates/mes-photos.html b/src/main/resources/templates/mes-photos.html index ddc7150..01cab91 100644 --- a/src/main/resources/templates/mes-photos.html +++ b/src/main/resources/templates/mes-photos.html @@ -11,24 +11,30 @@

Vous n'avez pas encore de photos.

+

Mes photos privées

    -
  • - - — - Voir +
  • + + [PRIVÉE] +
  • +
+ +

Mes photos publiques

+
    +
  • + + [PUBLIQUE]

Photos partagées avec moi

-
-

Aucune photo partagée.

-
-
    +
    • - - [SHARED] - — - Voir + + [SHARED]
    diff --git a/src/main/resources/templates/photo-detail.html b/src/main/resources/templates/photo-detail.html index a9beead..fdc6fb8 100644 --- a/src/main/resources/templates/photo-detail.html +++ b/src/main/resources/templates/photo-detail.html @@ -30,6 +30,14 @@
+

Partagée avec :

+

Partager la photo

diff --git a/target/classes/local/epul4a/fotosharing/controller/PhotoController.class b/target/classes/local/epul4a/fotosharing/controller/PhotoController.class index f4ef0c0..2a2b365 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/repository/PhotoRepository.class b/target/classes/local/epul4a/fotosharing/repository/PhotoRepository.class index 2bcfddf..2343e42 100644 Binary files a/target/classes/local/epul4a/fotosharing/repository/PhotoRepository.class and b/target/classes/local/epul4a/fotosharing/repository/PhotoRepository.class differ diff --git a/target/classes/local/epul4a/fotosharing/service/PhotoService.class b/target/classes/local/epul4a/fotosharing/service/PhotoService.class index 47ac7d3..a1627c2 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 0e8cfba..198309c 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/galerie.html b/target/classes/templates/galerie.html index ca224d8..8ad3e84 100644 --- a/target/classes/templates/galerie.html +++ b/target/classes/templates/galerie.html @@ -1,17 +1,40 @@ -Galerie + + + Galerie publique + +

Galerie publique

-

Accueil

+ + + + + -
    -
  • - nom - — - Voir -
  • -
diff --git a/target/classes/templates/mes-photos.html b/target/classes/templates/mes-photos.html index ddc7150..01cab91 100644 --- a/target/classes/templates/mes-photos.html +++ b/target/classes/templates/mes-photos.html @@ -11,24 +11,30 @@

Vous n'avez pas encore de photos.

+

Mes photos privées

    -
  • - - — - Voir +
  • + + [PRIVÉE] +
  • +
+ +

Mes photos publiques

+
    +
  • + + [PUBLIQUE]

Photos partagées avec moi

-
-

Aucune photo partagée.

-
-
    +
    • - - [SHARED] - — - Voir + + [SHARED]
    diff --git a/target/classes/templates/photo-detail.html b/target/classes/templates/photo-detail.html index a9beead..fdc6fb8 100644 --- a/target/classes/templates/photo-detail.html +++ b/target/classes/templates/photo-detail.html @@ -30,6 +30,14 @@
+

Partagée avec :

+

Partager la photo