Skip to content

Commit 07fdff5

Browse files
authored
[FEAT] 게시글 조회 구현
2 parents 424c097 + 1c4d845 commit 07fdff5

4 files changed

Lines changed: 97 additions & 19 deletions

File tree

src/main/java/com/example/FixLog/controller/PostController.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.example.FixLog.dto.UserIdDto;
44
import com.example.FixLog.dto.post.PostRequestDto;
55
import com.example.FixLog.dto.Response;
6+
import com.example.FixLog.dto.post.PostResponseDto;
67
import com.example.FixLog.service.PostService;
78
import org.springframework.web.bind.annotation.*;
89

@@ -21,22 +22,24 @@ public Response<Object> createPost(@RequestBody PostRequestDto postRequestDto){
2122
return Response.success("게시글 작성 성공.", null);
2223
}
2324

24-
// @GetMapping("/{postId}")
25-
// public Response<postResponseDto> viewPost(@RequestParam Long postId){
26-
// return Response.success("게시글 조회하기 성공", postService.viewPost(postId));
27-
// }
25+
@GetMapping("/{postId}")
26+
public Response<Object> viewPost(@PathVariable("postId") Long postId,
27+
@RequestBody UserIdDto userIdDto){
28+
PostResponseDto viewPost = postService.viewPost(postId, userIdDto);
29+
return Response.success("게시글 조회하기 성공", viewPost);
30+
}
2831

2932
@PostMapping("/{postId}/like")
3033
public Response<Object> togglePostLike(@PathVariable("postId") Long postId,
3134
@RequestBody UserIdDto userIdDto){
3235
String message = postService.togglePostLike(postId, userIdDto);
33-
return Response.success(message, null);
36+
return Response.success(message, null); // 좋아요 수정하기
3437
}
3538

3639
@PostMapping("/{postId}/bookmark")
3740
public Response<Object> toggleBookmark(@PathVariable("postId") Long postId,
3841
@RequestBody UserIdDto userIdDto) {
3942
String message = postService.toggleBookmark(postId, userIdDto);
40-
return Response.success(message, null);
43+
return Response.success(message, null); // 북마크 수정하기
4144
}
4245
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.example.FixLog.dto.post;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
6+
import java.util.List;
7+
8+
@Getter
9+
@AllArgsConstructor
10+
public class PostDto {
11+
private String postTitle;
12+
private String coverImageUrl;
13+
private String problem;
14+
private String errorMessage;
15+
private String environment;
16+
private String reproduceCode;
17+
private String solutionCode;
18+
private String causeAnalysis;
19+
private String referenceLink;
20+
private String extraContent;
21+
private List<String> tags;
22+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,17 @@
11
package com.example.FixLog.dto.post;
22

3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
6+
import java.time.LocalDate;
7+
8+
@Getter
9+
@AllArgsConstructor
310
public class PostResponseDto {
11+
private PostDto postInfo;
12+
13+
private String nickname;
14+
private LocalDate createdAt;
15+
private boolean isLiked;
16+
private boolean isMarked;
417
}

src/main/java/com/example/FixLog/service/PostService.java

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import com.example.FixLog.domain.post.PostTag;
99
import com.example.FixLog.domain.tag.Tag;
1010
import com.example.FixLog.dto.UserIdDto;
11+
import com.example.FixLog.dto.post.PostDto;
1112
import com.example.FixLog.dto.post.PostRequestDto;
13+
import com.example.FixLog.dto.post.PostResponseDto;
1214
import com.example.FixLog.exception.CustomException;
1315
import com.example.FixLog.exception.ErrorCode;
1416
import com.example.FixLog.repository.MemberRepository;
@@ -20,9 +22,11 @@
2022
import jakarta.transaction.Transactional;
2123
import org.springframework.stereotype.Service;
2224

25+
import java.time.LocalDate;
2326
import java.time.LocalDateTime;
2427
import java.util.List;
2528
import java.util.Optional;
29+
import java.util.stream.Collectors;
2630

2731
@Service
2832
public class PostService {
@@ -44,20 +48,32 @@ public PostService(PostRepository postRepository, MemberRepository memberReposit
4448
this.bookmarkFolderRepository = bookmarkFolderRepository;
4549
}
4650

51+
// 회원 정보 불러오기
52+
public Member getMemberOrThrow(Long userId) {
53+
return memberRepository.findById(userId)
54+
.orElseThrow(() -> new CustomException(ErrorCode.USER_ID_NOT_FOUND));
55+
}
56+
57+
// 이미지 null일 때 default 사진으로 변경 (프로필 사진,
58+
public String getDefaultImage(String image){
59+
String imageUrl = (image == null || image.isBlank())
60+
? "https://example.com/default-cover-image.png" : image;
61+
System.out.println(imageUrl);
62+
return imageUrl;
63+
}
64+
4765
// 게시글 생성하기
4866
@Transactional
4967
public void createPost(PostRequestDto postRequestDto){
50-
Long userIdInput = postRequestDto.getUserId();
51-
Member userId = memberRepository.findById(userIdInput)
52-
.orElseThrow(() -> new CustomException(ErrorCode.USER_ID_NOT_FOUND));
68+
Member member = getMemberOrThrow(postRequestDto.getUserId());
5369

5470
String coverImageUrl = postRequestDto.getCoverImageUrl();
5571

5672
// Todo : 북마크 카테고리별로 선택 제한 두기
5773

5874
// 게시글 발행
5975
Post newPost = new Post(
60-
userId,
76+
member,
6177
postRequestDto.getPostTitle(),
6278
coverImageUrl,
6379
postRequestDto.getProblem(),
@@ -85,15 +101,41 @@ public void createPost(PostRequestDto postRequestDto){
85101
}
86102

87103
// 게시글 조회하기
88-
// public postResponseDto viewPost(@RequestParam Long postId){
89-
// return new postResponseDto;
90-
// }
104+
public PostResponseDto viewPost(Long postId, UserIdDto userIdDto){
105+
Member userId = getMemberOrThrow(userIdDto.getUserId());
106+
107+
Post currentPost = postRepository.findById(postId)
108+
.orElseThrow(() -> new CustomException(ErrorCode.POST_NOT_FOUND));
109+
110+
PostDto postInfo = new PostDto(
111+
currentPost.getPostTitle(),
112+
currentPost.getCoverImage(),
113+
currentPost.getProblem(),
114+
currentPost.getErrorMessage(),
115+
currentPost.getEnvironment(),
116+
currentPost.getReproduceCode(),
117+
currentPost.getSolutionCode(),
118+
currentPost.getCauseAnalysis(),
119+
currentPost.getReferenceLink(),
120+
currentPost.getExtraContent(),
121+
currentPost.getPostTags().stream()
122+
.map(postTag -> postTag.getTagId().getTagName())
123+
.collect(Collectors.toList())
124+
);
125+
126+
String nickname = userId.getNickname();
127+
LocalDate createdAt = currentPost.getCreatedAt().toLocalDate();
128+
boolean isLiked = currentPost.getPostLikes().stream()
129+
.anyMatch(postLike -> postLike.getUserId().equals(userId));
130+
boolean isMarked = currentPost.getBookmarks().stream()
131+
.anyMatch(bookmark -> bookmark.getFolderId().getUserId().equals(userId));
132+
133+
return new PostResponseDto(postInfo, nickname, createdAt, isLiked, isMarked);
134+
}
91135

92136
// 게시글 좋아요
93137
public String togglePostLike(Long postIdInput, UserIdDto userIdDto){
94-
Long userIdInput = userIdDto.getUserId();
95-
Member userId = memberRepository.findById(userIdInput)
96-
.orElseThrow(() -> new CustomException(ErrorCode.USER_ID_NOT_FOUND));
138+
Member userId = getMemberOrThrow(userIdDto.getUserId());
97139

98140
Post postId = postRepository.findById(postIdInput)
99141
.orElseThrow(() -> new CustomException(ErrorCode.POST_NOT_FOUND));
@@ -117,9 +159,7 @@ public String togglePostLike(Long postIdInput, UserIdDto userIdDto){
117159

118160
// 게시글 북마크
119161
public String toggleBookmark(Long postIdInput, UserIdDto userIdDto){
120-
Long userIdInput = userIdDto.getUserId();
121-
Member userId = memberRepository.findById(userIdInput)
122-
.orElseThrow(() -> new CustomException(ErrorCode.USER_ID_NOT_FOUND));
162+
Member userId = getMemberOrThrow(userIdDto.getUserId());
123163

124164
Post postId = postRepository.findById(postIdInput)
125165
.orElseThrow(() -> new CustomException(ErrorCode.POST_NOT_FOUND));

0 commit comments

Comments
 (0)