From 66045aaf1496469a54c07e13766980b75d33a7c3 Mon Sep 17 00:00:00 2001 From: Subivas Date: Wed, 3 Dec 2025 09:28:16 +0100 Subject: [PATCH] FEAT : ajout compteur de partage --- .../controller/PhotoController.java | 35 ++++++++++-------- .../repository/PartageRepository.java | 1 + .../fotosharing/service/PartageService.java | 2 + .../service/impl/PartageServiceImpl.java | 4 ++ src/main/resources/templates/mes-photos.html | 16 +++++--- .../controller/PhotoController.class | Bin 9709 -> 10974 bytes .../repository/PartageRepository.class | Bin 1066 -> 1125 bytes .../fotosharing/service/PartageService.class | Bin 794 -> 849 bytes .../service/impl/PartageServiceImpl.class | Bin 7594 -> 7746 bytes target/classes/templates/mes-photos.html | 16 +++++--- 10 files changed, 48 insertions(+), 26 deletions(-) diff --git a/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java b/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java index a0dfabd..ca40266 100644 --- a/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java +++ b/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java @@ -20,6 +20,8 @@ import org.springframework.web.multipart.MultipartFile; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; @Controller public class PhotoController { @@ -84,7 +86,6 @@ public class PhotoController { /* ========================== MES PHOTOS ========================== */ - @GetMapping("/mes-photos") public String mesPhotos( @RequestParam(defaultValue = "0") int pagePrivees, @@ -92,30 +93,32 @@ public class PhotoController { @RequestParam(defaultValue = "0") int pagePartagees, @RequestParam(defaultValue = "0") int pageMesPartagees, Authentication auth, Model model) { - String email = auth.getName(); - - model.addAttribute("photosPrivees", - photoService.listPrivatePhotos(email, pagePrivees, 12)); - - model.addAttribute("photosPubliques", - photoService.listPublicPhotos(email, pagePubliques, 12)); - - model.addAttribute("photosPartagees", - photoService.listSharedWith(email, pagePartagees, 12)); - - model.addAttribute("mesPhotosPartagees", - photoService.listSharedPhotos(email, pageMesPartagees, 12)); - + // Récupération des pages + Page photosPrivees = photoService.listPrivatePhotos(email, pagePrivees, 12); + Page photosPubliques = photoService.listPublicPhotos(email, pagePubliques, 12); + Page photosPartagees = photoService.listSharedWith(email, pagePartagees, 12); + Page mesPhotosPartagees = photoService.listSharedPhotos(email, pageMesPartagees, 12); + // Calcul du nombre de partages pour TOUTES mes photos SHARED + Map shareCounts = new HashMap<>(); + mesPhotosPartagees.getContent().forEach(p -> { + shareCounts.put(p.getId(), partageService.countShares(p.getId())); + }); + // Envoi au model + model.addAttribute("photosPrivees", photosPrivees); + model.addAttribute("photosPubliques", photosPubliques); + model.addAttribute("photosPartagees", photosPartagees); + model.addAttribute("mesPhotosPartagees", mesPhotosPartagees); + model.addAttribute("shareCounts", shareCounts); model.addAttribute("pagePrivees", pagePrivees); model.addAttribute("pagePubliques", pagePubliques); model.addAttribute("pagePartagees", pagePartagees); model.addAttribute("pageMesPartagees", pageMesPartagees); - return "mes-photos"; } + /* ========================== GALERIE ========================== */ @GetMapping("/galerie") diff --git a/src/main/java/local/epul4a/fotosharing/repository/PartageRepository.java b/src/main/java/local/epul4a/fotosharing/repository/PartageRepository.java index 9c3a998..215ed96 100644 --- a/src/main/java/local/epul4a/fotosharing/repository/PartageRepository.java +++ b/src/main/java/local/epul4a/fotosharing/repository/PartageRepository.java @@ -12,4 +12,5 @@ public interface PartageRepository extends JpaRepository { boolean existsByPhoto_IdAndUtilisateur_Email(Long photoId, String email); List findByUtilisateur_Email(String email); Optional findByPhoto_IdAndUtilisateur_Email(Long photoId, String email); + int countByPhoto_Id(Long photoId); } diff --git a/src/main/java/local/epul4a/fotosharing/service/PartageService.java b/src/main/java/local/epul4a/fotosharing/service/PartageService.java index 1e36711..640cee8 100644 --- a/src/main/java/local/epul4a/fotosharing/service/PartageService.java +++ b/src/main/java/local/epul4a/fotosharing/service/PartageService.java @@ -14,4 +14,6 @@ public interface PartageService { boolean canComment(Long photoId, String email); boolean canAdmin(Long photoId, String email); void updatePermission(Long photoId, String targetEmail, String newPermission, String ownerEmail); + int countShares(Long photoId); + } diff --git a/src/main/java/local/epul4a/fotosharing/service/impl/PartageServiceImpl.java b/src/main/java/local/epul4a/fotosharing/service/impl/PartageServiceImpl.java index c4bad8d..6c432fb 100644 --- a/src/main/java/local/epul4a/fotosharing/service/impl/PartageServiceImpl.java +++ b/src/main/java/local/epul4a/fotosharing/service/impl/PartageServiceImpl.java @@ -140,5 +140,9 @@ public class PartageServiceImpl implements PartageService { partageRepository.save(partage); } + @Override + public int countShares(Long photoId) { + return partageRepository.countByPhoto_Id(photoId); + } } diff --git a/src/main/resources/templates/mes-photos.html b/src/main/resources/templates/mes-photos.html index 11329f4..569bc48 100644 --- a/src/main/resources/templates/mes-photos.html +++ b/src/main/resources/templates/mes-photos.html @@ -41,11 +41,17 @@

Mes photos partagées

-
- - - +
+
+ + + + +
+ +
+
l6WZo<<+dxR(B!LK&Y>;3HUoRjA$EsnPD6ZMAk$srJA3O=gC#`h9)h_ue~qIrpCP zpZ}bD-&pzTy1>)#k3J4yv0OS7xWxzrF&&#tT!0>X%vhUN&A5p^^ax6NV#!qdz{Z|f zM|*c)sxPSqx0pz%!6G%dwmXuDc5aBJy46t1#6VWh8FKUtTqr2r92tx>52Ru}&8I|? z-K!)00Sv+k5j;8GKx#%ILdUogc^`%4xI0$tJ6vc7mK8czvAb@i)q`m4BgYlu#K z*2HDFT;Pp#bVU0(ucOX>y(nyNF0M@H&F5aN`TCm%;vK12U%Z*?CkJ|?iPj*lz~>Eo z!Nirgiq0Lmm%!N6mpCcX(JiQ{%Uk$=7phHx~Edu>ih{?-_VX zx%_>*I@sJW=EKuDQ`RM;2_Ftnso(L73?9XgOgxJp+k?Ty;hzdjZPJ|1XetuxQI`GO z#B+GwJ{WBC30^eu5?;2an#+8nIAr1%c-4-X>-{dgXyA20*e%D<8NxYHwDMq*Ot$)4;7Yi)xVo~8~?E1DV(1k z#lKAa8?Q1R1O1(mRJ1*s=#3?lq-p@m@ve#YaF{4EGuk@ylA)=3dAdDD9q8GDI;+A4=|^W%hx=06EoJY@iF?nRGS4+D)D!95*cq9bO^TUw1q<`jQ02Eh7OM5uuczbv_V$XX zQ6gsx%Iaw7q$%r*3*?*td~&WSYvqg*IiJqfDUB-Tt88R(Vi}7i=vhm%=0mgiq|+|8 zYGji=*P3=xcR*sY*^moN>5*Q+bd8k8G8P}~yCB-UN*lSFG};vDNcANyW&nEgTL-wI zRblV8+Ux^XHQz$YUVFbabxx)>QRISOhO|p%$5L0=A%H(lAxIO zF_jH2DYPS%XC92z-`PQ)2# z!|B?=28M(4vu>@BTB)O3L4vSH>gm=j%#;RcB&y1pBDfBt!oc#wm}a0|J5?Z33#4T> z$6Ye#LvU}>4jGJ|G;@;3Tsc|=f#Q2KKp``36^x)#&|)+^48t-iOUx0(JZSMb?JCvo zW!vwxt5v(7?SRuROM6sLl0CskF?i-9xTwXnf+Ha78!U4aXi zm=7OK8|FP>KF1c~Ze9-NlU^%u1GZBN(%5Toog4#Gj%ECH0z0Y;vZ@QRstdBJ3$m)m zQB?)s^5S~_cJkfDcQ<*#^f)3ra!I^Ulj&%tmCg=kLyHpA{7lFnB63-x@_@8Dyu&u) zp>U{G^wDIy(~UK=L-)*af;&5OUoO(2ujir{(rRhqei=){<(P>pbR^PFD%ECFsa6(c zB2lXmc2Omadx@M|;RRK!oSp^jQ84&jvgjk-UaZ|Na^<_t$+AR_*Dl#t)l?t-;2z5p z`ld=HMOV63*jQCUQV%gLyc~MO@@BZ}3Eii-Yd>EzEj{AKu`10<8!cl5Pq5|Z+$YO? z`|zFY^dFS@^P4|ZQ*};wLeFU35gc?e#Z+JDCkii*X8Q`LYw-@cdmVXiV>0PeLr&M> zCRU}J(TemfEJr(WCT=D5ck#l$n^)i4IrR?QhP!YtuXqpgzZdstpf~9fH=M7RMfIEoj5+^HAPZVnOAhw|!pMHZBbEGQMymN}j(98k2ig>F@| zrH!w$cH*e4QP%0Ba)maq*v*bIr)E#5nVc#sWtFz9bw*YCl>%kiI4x@_XtWB3@ymzs zt9|&xDE_LfRb|K`>0irKJ|}mc;IY4-y<@1tliGT9%vR}RcC{`^O<6yhvVJt_;-rGx zBx~rA3U0bdyOcd=&ob~@elX_I-ZgwDTvWlxxp?Z4!6?(g;Hs*wOnmw0UHDC%Vc@yx z*87Gu;b)Je@s|4|LUVvc?x1$A#!<<-6w103a$K6oeH9R8@kB6kv}xDDC{(%c#KQTW z=FNoS<(XCKf9g#Ag(sN0K2)@$_*8dY^>e3A&C$v$;G>mo1Dl26Hb66Z)ne>?OyDk;uU YEL)0J8SwgXKL3MWzg#F6%T`$b1%`PKnE(I) delta 3437 zcma)833yc175>j`Ze$wb z7ORDaQlV&Fk|IR}ku;$Kwzjokt+fkwv6e1&vDH>t4o51-`RHnzyevkJGj{>_hXeH+`qDKpfA;)Ok5j}r$RUl-6nd_Ywa|y zNc+(*$jO`-yt+HFX3##9G?7BDAh$b_8faHLo$XqWAA^%OI+6n&D>7O?ZsIz1Bcg6x zv9co>@47NEu+ooD3ZgynlzqKD`^xomP2AvEvF}V+Nee>#RG#rWh)?4)20m-zW_-@d z4bH1xtDva^6K?x)+k|Msh#%{${$N4z7X(4N&|m{q9NcN*i&$@M4bK0l#Z7yoo$CC! zip;HxIK;bB43`lHjV@zD9F58-Pjb|{g*v!l1I zt0&Rx$F?9I#V!N86$Ou3U1n454nOuzI=d_tPx|q7Uh22;GuT5IGqDffu=bk^O7;s( z?PEh%oKAErR}Y$a65q7)!x#C1r%Zes-?8H1bNxej+Qj#8$l4YDpil6Wf$v*pq$2kj zGzRb-erVu%6FhpMC}&wmN-Jfab-c79(i)WcvcQmqG%x2^XO+L< zIZrU%dakV8x~bgnGvornRJ|OWdS)mDMh(A*3ol!Hr`FEGANY7m;N$OfcrXJ2R3n0! zn1UL_P>VluXAZBZQ-8vrt(=P5G+yB{&w~($9DY;y74Z}N1(ixQ=M7v5M|U)~i-SuW z@@dg*t<=@Yqa8wwANRs9cw`p ztth~JIL0>Q(LdWF&w9FN_GPOf?Ll{;w@Sm=bZj7 zGq{(*`zA%l_?-Y2<0K~&Uca5?^*fYTdMNm}5~gTNOq3aJv8xarr+*6zyX zHkeujxv`k6UPM+eMls$`FqfbSm*Q-+6V_6khs(L!t^wB4N${LaAZOwcFO7w84z`Go zCTE~Z4Dl0|0uzC29K{AM97lyg9SW3Jgi6v9;M^ra2app62|)oe7)&ua5eZ9#h8YuC zPJZ}=FdXxap;XXf#C*{N17yUE(p+;4t34RQEH|#Cyw8@GDfyZ#`2gie z!oE=8Q5&Di+PJZF6gN3~Zz;=O-CCZ#`h0=MSw?T4Ov8(r7Qj`^^{Y{cPNYjYnT9wT zaSfU|&cjMvfCQFsT#D8B7`oBLaTR)5@%wNK`mqsf@E|*edLWnEJUF2kCZ#zH1-Zdm z&QyjCvsUNm3>(He&Q$P*b=G;)daBaSN1wJzE|b#G@rn7MHrMjIjo&(cOukccZ!%PQ zI#jdOBV+EVT#NqyDYYRW*d$X_RIOQ61?fB7xU@dHp~2?3KDu#|@aWx&MYn!@Q4QgG zgmEJuS{haCSBeZfFRL9gswF=|Ml~IOi)4gZODrjXTMBtz6#`pQM9r@#zyX)!b0_-K-K;s@$@cPOnHmcDUAdtO$ zTpiWf?};i;^61H^EAt|vPbeZinn*hx?;sI(B9A>f9~)RkH?j!dg(lq1+LqqLSAP#a zgw0riEf{1MyBYVw!hQUIKU?Voc!c8~JftIVjg8)kz(}StkP#gVm5w7$!5h(0@zDHs zT{pZmx>iaVA0I7#1bcBj&2(IW%dkz#nCXLP!w${@PWbE#<-DK@O%(2Nc?=vgSvhA7BKnpgZe4%B+ZXz)xOWX4tJU%-~dE z_^$>a)!OYGw{n{Yl-KH?$V{opxVxQoU-hy^ofP#AF^~3m4Bz!ChY!=?7H?h5JA!8) z!w*LBlYMFYLZMIvCC0b&%qcJM3HIOplpa7C4r)}Y^_8jCC$+luH9Ghj9ejZA=cPRwbuMw#aXo=tMb2q`Qh#dX3UuUn+NQuEf`1sjm?7c= zw5sezZ6e0-EBCucER92KYlk(sO8bffDe6FqW*{k-SwU2;(PJk@lR4I)V-#iu$@Db4 zvo$&q>L+bpUM)W2Q(7#J9A8KgIIy<$@1PtGsRD{-m}$jC3rkM~SrWDwTy$x19s)Xz!G zOV{_w&r7$~^ql;OX(uD=qIV2}jUQUJiK B7(f63 delta 48 zcmaFLv5JH1)W2Q(7#J9A86-Dyy<(ay!@Ql5W%3o~93ciK25z7P6N4CoIGC0I0BG9^ AlK=n! diff --git a/target/classes/local/epul4a/fotosharing/service/PartageService.class b/target/classes/local/epul4a/fotosharing/service/PartageService.class index 58de303df6d4720524073a29206b274315e58006..72df5ff81e7b3d5f67dfe1829343ae54603949a4 100644 GIT binary patch delta 94 zcmbQmc9D(i)W2Q(7#J9A8DuwdsW2&VC+C;ul>}!b7Nr(5G6-wgOcprR)3T u=cQX~dQR41(qrV99L=;L zKN1++c+QVM3E>qh7l^vEdskswx!LE!UkW^^YWNyw{W!~xzu7_1@Re|E^0~+^91abi z;|o8z^v%IFDUWc~Y4}X6AXUsX4WG)HS0Nwy-4xI$NTG?n!Bs>teJ+%8BnXZAsZgVS zRX9k8_3Oe()eC|X&%uT%Jr}+*JJ?icq9|c!vMGn*{(PR*Dfbh43B6YZ5Sm*V(emxLLLwh~hrHfj4;@x1j?k@D^Oy zfi&L66L6!1Wq1ega@9}r8ZT^BtZ}2Yifi1sMT!eJ7!w5(z`2209)$PszEn6Lxs?^J zi!Q%whW$oCnkJ>JP-Cu?2`ZiTKb&jK=yIu{6GR0U~E1auyBJwVi z7XwfZWAoPG;JyRcGRAINkoO^8!0$+{1;PC_;_v5peu~WaHdDBkp2XxNZca_&_Wvqx zH$XzgKv}~kjOy5h zYX$KQWowPqKhS?)$trK%62+L^q0bFHCn(yR8|IHbq#p{7b|r3;IfO75^_Yh^S}+F} z;CWi}v;qcRz+QXGm@oV6WZH=AM>B$q(3)N%6ZW0y+!c;*6QhFr=*!WW9l$~I_HkY( zTmXmo1@Iz`FX3gC#7O#ahUjiuvE2!A2NM8>{Sd=m2*>scUR8i$yvA8j`Au>bLIw}u zb-ckcZp2M^6NeGTdK7R3PauLJEWlfMn>{_sJ#hr8SQ^3dDi%j@y-F?_A|?Y8z}Ubf zKfybAS7q3mxq%s4nT2c5H>Azau+7h~&C75h8Wk_7cu`0dmq#curw#Q1)dmM7cn^IF zFr8UPz*@7|?f@=Rr_t>Lx_v-5j;R);aJ4Eo$Z}%}6~a+_znL*-A&x1;`yOJ-yqAc( zvdd;6dVNH%kLdLgt2{&pF7gqFv*!O1A9#qFY?+94%>{LkZWTQ~qQ^({_=szKgn16Z zq*JJ?!sG!pR?*D9#XDUEd98En`p{JmyVyk~M7gb!--U+49uxz1Johj&v2*7o)j_>} zLT!W0_2q_GUH^LQ{C#kbo$&8up84B1r1tqEN zuB480eF8{m&V}W@;~R

Mes photos partagées

-
- - - +
+
+ + + + +
+ +
+