88import com .example .FixLog .domain .post .PostTag ;
99import com .example .FixLog .domain .tag .Tag ;
1010import com .example .FixLog .dto .UserIdDto ;
11+ import com .example .FixLog .dto .post .PostDto ;
1112import com .example .FixLog .dto .post .PostRequestDto ;
13+ import com .example .FixLog .dto .post .PostResponseDto ;
1214import com .example .FixLog .exception .CustomException ;
1315import com .example .FixLog .exception .ErrorCode ;
1416import com .example .FixLog .repository .MemberRepository ;
2022import jakarta .transaction .Transactional ;
2123import org .springframework .stereotype .Service ;
2224
25+ import java .time .LocalDate ;
2326import java .time .LocalDateTime ;
2427import java .util .List ;
2528import java .util .Optional ;
29+ import java .util .stream .Collectors ;
2630
2731@ Service
2832public 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