diff --git a/src/main/java/com/example/spot/domain/Post.java b/src/main/java/com/example/spot/domain/Post.java index 4dacbf33..d3a254f3 100644 --- a/src/main/java/com/example/spot/domain/Post.java +++ b/src/main/java/com/example/spot/domain/Post.java @@ -67,7 +67,7 @@ public class Post extends BaseEntity { @JoinColumn(name = "member_id") private Member member; - public void edit(PostUpdateRequest request, List images) { + public void edit(PostUpdateRequest request, List images, String existingImage) { if (StringUtils.hasText(request.getTitle())) { this.title = request.getTitle(); } @@ -78,13 +78,25 @@ public void edit(PostUpdateRequest request, List images) { this.isAnonymous = request.isAnonymous(); - this.image = (images != null && !images.isEmpty() && StringUtils.hasText(images.get(0))) - ? images.get(0) - : null; + updateImage(images, existingImage); if (request.getType() != null) { this.board = request.getType(); } + + if (request.getType() != null) { + this.board = request.getType(); + } + } + + private void updateImage(List images, String existingImage) { + if (StringUtils.hasText(existingImage)) { + this.image = existingImage; + } else if (images != null && !images.isEmpty() && StringUtils.hasText(images.get(0))) { + this.image = images.get(0); + } else { + this.image = null; + } } diff --git a/src/main/java/com/example/spot/service/post/PostCommandServiceImpl.java b/src/main/java/com/example/spot/service/post/PostCommandServiceImpl.java index 0bd3106b..f5c54bf2 100644 --- a/src/main/java/com/example/spot/service/post/PostCommandServiceImpl.java +++ b/src/main/java/com/example/spot/service/post/PostCommandServiceImpl.java @@ -140,7 +140,7 @@ public PostCreateResponse updatePost(Long memberId, Long postId, PostUpdateReque } // 게시글 수정 - post.edit(postUpdateRequest, getImageUrls(postUpdateRequest.getImage())); + post.edit(postUpdateRequest, getImageUrls(postUpdateRequest.getImage()), postUpdateRequest.getExistingImage()); // 수정된 게시글 정보 반환 return PostCreateResponse.toDTO(post); diff --git a/src/main/java/com/example/spot/web/controller/PostController.java b/src/main/java/com/example/spot/web/controller/PostController.java index 0ecceb7a..1a2e5416 100644 --- a/src/main/java/com/example/spot/web/controller/PostController.java +++ b/src/main/java/com/example/spot/web/controller/PostController.java @@ -138,7 +138,8 @@ public ApiResponse getPostAnnouncement() { @Tag(name = "게시판", description = "게시판 관련 API") @Operation( summary = "[게시판] 게시글 수정 API", - description = "게시글 Id를 받아 게시글을 수정합니다.", + description = "게시글 Id를 받아 게시글을 수정합니다. existingImage는 기존 이미지 URL입니다. 수정할 이미지가 없을 경우 null로 보내주세요. 요청 시, 요청 타입은 Multipart/form-data로 보내야 합니다." + + "\n" + "existingImage와 image 둘 중 하나만 보내주세요. 둘 다 보내면 기존 이미지로 덮어씌워집니다.", security = @SecurityRequirement(name = "accessToken") ) @PatchMapping(value = "/{postId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) diff --git a/src/main/java/com/example/spot/web/dto/post/PostUpdateRequest.java b/src/main/java/com/example/spot/web/dto/post/PostUpdateRequest.java index dc46f189..3449d3cd 100644 --- a/src/main/java/com/example/spot/web/dto/post/PostUpdateRequest.java +++ b/src/main/java/com/example/spot/web/dto/post/PostUpdateRequest.java @@ -37,6 +37,8 @@ public class PostUpdateRequest { private MultipartFile image; + private String existingImage; + public Board getType() { return Board.findByValue(type); }