From 6cb141293c2183262e1dcaa2b508649f610ae615 Mon Sep 17 00:00:00 2001 From: Subivas Date: Tue, 2 Dec 2025 09:12:07 +0100 Subject: [PATCH] FEAT : Ajout pagination galerie publique --- .../controller/PhotoController.java | 32 +++++++++----- .../repository/PhotoRepository.java | 5 +++ .../fotosharing/service/PhotoService.java | 6 +++ .../service/impl/PhotoServiceImpl.java | 33 ++++++++++++++ src/main/resources/application.properties | 25 ----------- src/main/resources/templates/galerie.html | 41 ++++++++++++++---- src/main/resources/templates/mes-photos.html | 30 ++++++++----- .../resources/templates/photo-detail.html | 8 ++++ .../controller/PhotoController.class | Bin 9357 -> 10122 bytes .../repository/PhotoRepository.class | Bin 937 -> 1287 bytes .../fotosharing/service/PhotoService.class | Bin 827 -> 1172 bytes .../service/impl/PhotoServiceImpl.class | Bin 6750 -> 9118 bytes target/classes/templates/galerie.html | 41 ++++++++++++++---- target/classes/templates/mes-photos.html | 30 ++++++++----- target/classes/templates/photo-detail.html | 8 ++++ 15 files changed, 181 insertions(+), 78 deletions(-) delete mode 100644 src/main/resources/application.properties 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 f4ef0c09c4bae2bb3acdfe542edfbd8868d173f3..2a2b365642eda65a0cff03c71864b891906c4f47 100644 GIT binary patch delta 3395 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 diff --git a/target/classes/local/epul4a/fotosharing/repository/PhotoRepository.class b/target/classes/local/epul4a/fotosharing/repository/PhotoRepository.class index 2bcfddf9d4bd14c1d9e7249c84a3055c6590e600..2343e4262a4285f7b90d6ddfbc1a66cd6994346b 100644 GIT binary patch delta 237 zcmZ3<-p<8!>ff$?3=9mm46+-!B$$|+HGC!tNKU@MD9-3JFff$?3=9mm3{vb2OpFZ1lLJ{KH){T5oSewKokfh1K_4ifGTDKJmr-J} rAB!U+)8q*(W=agq4BS9nObmhyLSR~$K?F#1F)%WSGKe!sI!FQl+U5_b diff --git a/target/classes/local/epul4a/fotosharing/service/PhotoService.class b/target/classes/local/epul4a/fotosharing/service/PhotoService.class index 47ac7d3c97f0ccf8b112306edb9609c1dc4446d7..a1627c2dbe88a13e73174719c3b3f8172e378ed3 100644 GIT binary patch delta 258 zcmdnZHieVx)W2Q(7#J9A8B{lN)iLP`=42L^1QcbKC6=THWaO9R7c(-jm*y2`Bo?JI zGN@|!WF?j*>gOcprR)3TPn<6%9|n{!04elLVPxO}>n=^o$xLQs(9-bq)SMVEs+N*i zlBl1OpPQJOryr1*o@&j=z)}FDfmCs36_5&osuV(3Y2!0dKyu=F9ws~M$!$zJjGU7< zGu5%MFfvF@e$ON``2&-rtu%uS1JGii7dV+1WPy}00|QWj9D_Uq6HHhED69y?B0$W< MpafK}3}&eS0D}!Z!2kdN delta 40 vcmbQjxtopa)W2Q(7#J9A8Dutc)iF&jW!7S3oxFg#j*EejK?*3r#2^g-{CNp( diff --git a/target/classes/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.class b/target/classes/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.class index 0e8cfba62e808c1234e9e066eb137aac28e65028..198309c087c9a7b5e2a8472ee6080c305a09c5ad 100644 GIT binary patch delta 2982 zcmb7FX-r(#75>i5z`)}H!?4(ZZ3Z$B!0gy~8RMAPI3dM0C78y>sq2LQRGNTYblGo$*!Habt}bb({yjsrft%FP4^{j+SKWH@0(61#7-26 z;hlTmx!?KDch0%*)pd{DX1s9i(q{n-%CXbNi)JPWFP=B?MSMx%OUF`aL8!HDbly5< zbuXpuc=znm;!N63EOw72V^Mp?O2;B4xQs8GcoAO_6wcc5bSx>@)cWp+@-b8CWXxLV zzB8S4%FM!UAD%D4)A+iHZ{VAPvRQjEdh2~-hZ5<;!I7w-DGMF97U#N06V554sx*iK zd|UDUj-byuVKhwLfarHkd=D=RiWTZkJE=0Pd0U2ij;Q>sc*MX%_<@NZ;so;hSTAa@ZLPJ(EZOz3L(I1=m34ThSXe=H}#{|{+1ouqO$7a%zwn+m&$1nW&rHNnR z*MhaqC!{JIwbE91G_hdWRFrt*v7<{`bx&ee(AzpP(l)9bn{VJq@gK%-O+10u1RrsR ziuy$RuUPJHO~+#q7prIaJ7)R{esAIr_#@?>i>3Fn(sqiqU1BA>TAjwqM(4@ml7n>o zB>rsTFK8AN(Q%l>;|2!tHxqxy>(qe!t$6AN8tgY<}keQs`aZl zEzVnpxuO^k;7t?%!AXICY+-6S-t$2u8d$j2OL=L;e0O8*=#LLN3C!+ zvv9v)Fh4iWj;*r05@_tm5^vj2BKHbvoUJL|evLC$y~a6ST`?qp4<1CY z1tK2age81>`SYcu06{KIZU#|~fPPk@iqA3#3ZxJo@jI_ohdZQ*n>D0VViPZ{%{b0vPBEPe*s4R%!XWrn6`D_Fl}mv9l~qAM zmGo5!((*FKNvWjeL#7kQrHW<&AwMS7QiDQkE122vD_&6}Y?V}|gUR`K}C`r$l;+w%}gatI~Tn2*p%QcXnh$W4R|<2ha8 zH&(9h$wS(ukxb32)J4i3YUZJqZ1|nEy>1cRz8Gh%C)guH(P?z) z(6>fzmR3e@<9ij#-D&5JY8@u~cB*ULsC;#h8Yv+g+RtU+UwaXcdTk!DCTSnlk??zyn1ZGGeN&?gG zpFoFns$wyp6U<+Y+dziBR6zy4mQ|qR626sV@Di`b^Z5Q1yt2FVDoT}W=SBR;gVQ|f z)xy-V=fO`_HRe%=!>n2yH)8?ov8egEQ$3IqXh6E8o3&zSEmg)t_i_$O4*}J96hYp^ zdOt5jRm5VCbg|!9NVZL{^r^0;eGhv=-xl?&K7*g_CNcjRJWg)E@#YoH&_zy?VJeS{ zzF~-=?wWqdtkYzwWWB7Tdm+kXKsGQ;HhMn;ujkM0_>BQWU9se%SZw0~)kfyp^Z4C) z{Hgss{`w@>Zp*ksIiFW0Q)f&Em=a;aLbMF;?=0Lf!IUro;{1c@dr=gj;Nr>XpR)QG|3ahXvU1~QU5%gg9A3qMim6Ttia9r0!QCQ zTtt9N51j#c;WOtTvN&rDaN-g-UN#1zlP2Q|ogun_eDdN*M*%WXh#)57D!rxjf?KcQ zx>1rF&%+HaGwj5JXfO^$-b6p_M6Sr~Z!wW`%$Fs6U5XgWkl=3?reG1KVmYRv8Pl-^ zrmR7hZ8NPQT6St2!EIU&v?K_+ zL(@sYow$o(xG1>}_h@MpU4Z*|zz^5Xx*y^ZD}GFn7q;Lisx(xa&k{VL(?PZ9zlsOw z7~~k@5In_F)kNBLoK-4;(i5n(pEi;)pVb4GnQM(%OUMdI)e^unrYI)cDO@P#a~xD% zq&;_x=_XSv>%svW(*>RCb6MQlaa?zb>&6JVEh+E_<6oFNUsB)|y2(%i6`WNkGnBw_ z9O}Z+|0U*|5*{mXOu~Y_rteKE+g8HtgcT6xXSQudU4EX`1M6rl|kHrxW?A zZ!)fLNq*JO^x5#myf&(vU%CFqk<0t7uF-e#6Z8|m1 -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