Skip to content

Commit b0b9c4f

Browse files
committed
[Feat]: 투표 게시글 조회 시 내가 선택했던 투표 번호가 응답으로 가도록 추가
1 parent 0821019 commit b0b9c4f

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

back/src/main/java/com/back/domain/poll/converter/PollConverter.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,13 @@ public PollOptionResponse fromPollOptionJson(String voteContent) {
7777
throw new ApiException(ErrorCode.POLL_VOTE_INVALID_FORMAT);
7878
}
7979
}
80+
81+
public PollOptionResponse.VoteOption fromPollOptionInVoteOptionJson(String voteContent) {
82+
if (voteContent == null) return null;
83+
try {
84+
return objectMapper.readValue(voteContent, PollOptionResponse.VoteOption.class);
85+
} catch (JsonProcessingException e) {
86+
throw new ApiException(ErrorCode.POLL_VOTE_INVALID_FORMAT);
87+
}
88+
}
8089
}

back/src/main/java/com/back/domain/poll/dto/PollOptionResponse.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* 투표 선택지 응답 DTO
77
*/
88
public record PollOptionResponse(
9+
List<Integer> selected,
910
List<VoteOption> options
1011
) {
1112
public record VoteOption(

back/src/main/java/com/back/domain/poll/repository/PollVoteRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@
1010

1111
import java.util.List;
1212
import java.util.Map;
13+
import java.util.Optional;
1314

1415
/**
1516
* 투표 참여 엔티티에 대한 데이터베이스 접근을 담당하는 JpaRepository.
1617
*/
1718
@Repository
1819
public interface PollVoteRepository extends JpaRepository<PollVote, Long> {
1920
List<PollVote> findByPostId(@Param("postId") Long postId);
21+
22+
Optional<PollVote> findByPostIdAndUserId(Long userId, Long postId);
2023
}

back/src/main/java/com/back/domain/post/service/PostService.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.back.domain.like.repository.PostLikeRepository;
44
import com.back.domain.poll.converter.PollConverter;
55
import com.back.domain.poll.dto.PollOptionResponse;
6+
import com.back.domain.poll.repository.PollVoteRepository;
67
import com.back.domain.post.dto.PostDetailResponse;
78
import com.back.domain.post.dto.PostRequest;
89
import com.back.domain.post.dto.PostSearchCondition;
@@ -21,6 +22,8 @@
2122
import org.springframework.stereotype.Service;
2223
import org.springframework.transaction.annotation.Transactional;
2324

25+
import java.util.Collections;
26+
import java.util.List;
2427
import java.util.Set;
2528
import java.util.stream.Collectors;
2629

@@ -35,6 +38,7 @@ public class PostService {
3538
private final UserRepository userRepository;
3639
private final PostRepository postRepository;
3740
private final PostLikeRepository postLikeRepository;
41+
private final PollVoteRepository pollVoteRepository;
3842
private final PostMappers postMappers;
3943
private final PollConverter pollConverter;
4044

@@ -58,7 +62,15 @@ public PostDetailResponse getPost(Long userId, Long postId) {
5862
return postMappers.toDetailResponse(post, isLiked);
5963
}
6064

61-
PollOptionResponse pollResponse = pollConverter.fromPollOptionJson(post.getVoteContent());
65+
List<PollOptionResponse.VoteOption> options =
66+
pollConverter.fromPollOptionJson(post.getVoteContent()).options();
67+
68+
List<Integer> selected = pollVoteRepository.findByPostIdAndUserId(postId, userId)
69+
.map(vote -> pollConverter.fromChoiceJson(vote.getChoiceJson()))
70+
.orElse(Collections.emptyList());
71+
72+
PollOptionResponse pollResponse = new PollOptionResponse(selected, options);
73+
6274
return postMappers.toDetailWithPollsResponse(post, isLiked, pollResponse);
6375
}
6476

0 commit comments

Comments
 (0)