Refactoring

This commit is contained in:
dahoud
2026-02-02 19:07:36 +00:00
parent 7021b7a7ce
commit 6e89295e6b
5 changed files with 48 additions and 8 deletions

View File

@@ -0,0 +1,25 @@
package com.lions.dev.dto.request.social;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;
/**
* DTO pour la mise à jour d'un post social.
*
* Utilisé dans les requêtes PUT /posts/{id} avec un body JSON
* (content, imageUrl) envoyé par le client Flutter.
*/
@Getter
@Setter
public class SocialPostUpdateRequestDTO {
@Size(max = 2000, message = "Le contenu ne peut pas dépasser 2000 caractères.")
private String content;
@Size(max = 500, message = "L'URL de l'image ne peut pas dépasser 500 caractères.")
private String imageUrl;
public SocialPostUpdateRequestDTO() {
}
}

View File

@@ -31,6 +31,8 @@ public class SocialPostResponseDTO {
private int likesCount;
private int commentsCount;
private int sharesCount;
/** Indique si l'utilisateur courant a liké ce post (attendu par le client Flutter). */
private boolean isLikedByCurrentUser = false;
/**
* Constructeur à partir d'une entité SocialPost (v2.0).
@@ -51,6 +53,7 @@ public class SocialPostResponseDTO {
this.likesCount = post.getLikesCount();
this.commentsCount = post.getCommentsCount();
this.sharesCount = post.getSharesCount();
this.isLikedByCurrentUser = false; // À enrichir si on passe le userId courant (table post_likes)
}
}
}

View File

@@ -1,6 +1,7 @@
package com.lions.dev.resource;
import com.lions.dev.dto.request.social.SocialPostCreateRequestDTO;
import com.lions.dev.dto.request.social.SocialPostUpdateRequestDTO;
import com.lions.dev.dto.response.social.SocialPostResponseDTO;
import com.lions.dev.entity.social.SocialPost;
import com.lions.dev.exception.UserNotFoundException;
@@ -139,8 +140,7 @@ public class SocialPostResource {
* Met à jour un post.
*
* @param postId L'ID du post
* @param content Le nouveau contenu
* @param imageUrl La nouvelle URL d'image (optionnel)
* @param requestDTO Body JSON contenant content et/ou imageUrl (compatible client Flutter)
* @return Le post mis à jour
*/
@PUT
@@ -148,15 +148,24 @@ public class SocialPostResource {
@Transactional
@Operation(
summary = "Mettre à jour un post",
description = "Met à jour le contenu et/ou l'image d'un post existant")
description = "Met à jour le contenu et/ou l'image d'un post existant (body JSON)")
public Response updatePost(
@PathParam("id") UUID postId,
@QueryParam("content") String content,
@QueryParam("imageUrl") String imageUrl) {
SocialPostUpdateRequestDTO requestDTO) {
LOG.info("[LOG] Mise à jour du post ID : " + postId);
if (requestDTO == null) {
return Response.status(Response.Status.BAD_REQUEST)
.entity("{\"message\": \"Body JSON requis (content, imageUrl).\"}")
.build();
}
try {
SocialPost post = socialPostService.updatePost(postId, content, imageUrl);
SocialPost post = socialPostService.updatePost(
postId,
requestDTO.getContent(),
requestDTO.getImageUrl()
);
SocialPostResponseDTO responseDTO = new SocialPostResponseDTO(post);
return Response.ok(responseDTO).build();
} catch (IllegalArgumentException e) {

View File

@@ -172,7 +172,10 @@ public class SocialPostService {
throw new IllegalArgumentException("Post non trouvé avec l'ID : " + postId);
}
post.setContent(content);
// Ne pas écraser par null (mise à jour partielle / body JSON)
if (content != null && !content.isBlank()) {
post.setContent(content);
}
if (imageUrl != null) {
post.setImageUrl(imageUrl);
}