|
2 | 2 |
|
3 | 3 | import com.devin.dev.controller.post.PostForm;
|
4 | 4 | import com.devin.dev.controller.post.PostSearchCondition;
|
| 5 | +import com.devin.dev.controller.post.PostUpdateForm; |
| 6 | +import com.devin.dev.controller.post.ReplyUpdateForm; |
5 | 7 | import com.devin.dev.controller.reply.ReplyOrderCondition;
|
6 | 8 | import com.devin.dev.dto.post.PostDetailsDto;
|
7 | 9 | import com.devin.dev.dto.post.PostInfoDto;
|
@@ -283,6 +285,58 @@ public DefaultResponse<?> changePostLike(Long postId, HttpServletRequest request
|
283 | 285 | private boolean isNotSameUser(User firstUser, User secondUser) {
|
284 | 286 | return !firstUser.getId().equals(secondUser.getId());
|
285 | 287 | }
|
| 288 | + |
| 289 | + @Transactional |
| 290 | + public DefaultResponse<?> editPost(Long postId, PostUpdateForm form, HttpServletRequest request) { |
| 291 | + String token = tokenProvider.parseToken(request); |
| 292 | + Long userId; |
| 293 | + if (tokenProvider.validateToken(token)) { |
| 294 | + userId = tokenProvider.getUserId(token); |
| 295 | + } else { |
| 296 | + return new DefaultResponse<>(StatusCode.FAIL_AUTH, ResponseMessage.NOT_FOUND_USER); |
| 297 | + } |
| 298 | + Optional<User> userOptional = userRepository.findById(userId); |
| 299 | + if (userOptional.isEmpty()) { |
| 300 | + return new DefaultResponse<>(StatusCode.NOT_EXIST, ResponseMessage.NOT_FOUND_USER); |
| 301 | + } |
| 302 | + Optional<Post> postOptional = postRepository.findById(postId); |
| 303 | + if (postOptional.isEmpty()) { |
| 304 | + return new DefaultResponse<>(StatusCode.NOT_EXIST, ResponseMessage.NOT_FOUND_POST); |
| 305 | + } |
| 306 | + Post post = postOptional.get(); |
| 307 | + List<Subject> postSubjects = subjectRepository.findByNameIn(form.getPost_tags()); |
| 308 | + |
| 309 | + // 기존 태그 및 이미지 경로 삭제 |
| 310 | + List<PostImage> postImages = postImageRepository.findByPost(post); |
| 311 | + postImageRepository.deleteInBatch(postImages); |
| 312 | + |
| 313 | + // 수정된 내용 반영 |
| 314 | + List<PostImage> newPostImages = PostImage.createPostImages(form.getPost_images()); |
| 315 | + post.setTitle(form.getTitle()); |
| 316 | + post.setContent(form.getContent()); |
| 317 | + List<PostTag> deleteList = new ArrayList<>(); |
| 318 | + |
| 319 | + for (PostTag tag : post.getTags()) { |
| 320 | + if (!postSubjects.contains(tag.getTag())) { |
| 321 | + deleteList.add(tag); |
| 322 | + } else { |
| 323 | + postSubjects.remove(tag.getTag()); |
| 324 | + } |
| 325 | + } |
| 326 | + List<PostTag> newPostTags = PostTag.createPostTags(postSubjects); |
| 327 | + postTagRepository.deleteInBatch(deleteList); |
| 328 | + |
| 329 | + post.setPostTags(newPostTags); |
| 330 | + post.setPostImages(newPostImages); |
| 331 | + |
| 332 | + // 저장 |
| 333 | + postImageRepository.saveAll(newPostImages); |
| 334 | + postRepository.save(post); |
| 335 | + postTagRepository.saveAll(newPostTags); |
| 336 | + |
| 337 | + // 성공 메시지 및 코드 반환 |
| 338 | + return new DefaultResponse<>(StatusCode.SUCCESS, ResponseMessage.POST_EDIT_SUCCESS); |
| 339 | + } |
286 | 340 | }
|
287 | 341 |
|
288 | 342 |
|
0 commit comments