Skip to content

Commit f815228

Browse files
authored
fix: 답변율 퍼센트 수정 (#138)
1 parent c13703f commit f815228

File tree

2 files changed

+49
-57
lines changed

2 files changed

+49
-57
lines changed

src/main/java/com/oronaminc/join/answer/dao/AnswerRepository.java

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,61 +2,62 @@
22

33
import com.oronaminc.join.answer.domain.Answer;
44
import com.oronaminc.join.question.domain.Question;
5-
import java.time.LocalDateTime;
6-
import java.util.List;
7-
import java.util.Optional;
85
import org.springframework.data.domain.Pageable;
96
import org.springframework.data.jpa.repository.JpaRepository;
107
import org.springframework.data.jpa.repository.Query;
118
import org.springframework.data.repository.query.Param;
129

10+
import java.time.LocalDateTime;
11+
import java.util.List;
12+
import java.util.Optional;
13+
1314
public interface AnswerRepository extends JpaRepository<Answer, Long> {
1415

1516
Optional<Answer> findByQuestionId(Long questionId);
1617

1718
@Query("""
18-
SELECT a
19-
FROM Answer a
20-
JOIN FETCH a.member m
21-
WHERE a.question.id = :questionId
22-
ORDER BY a.createdAt DESC, a.id DESC
23-
""")
19+
SELECT a
20+
FROM Answer a
21+
JOIN FETCH a.member m
22+
WHERE a.question.id = :questionId
23+
ORDER BY a.createdAt ASC, a.id ASC
24+
""")
2425
List<Answer> findFirstPageByQuestionId(
25-
@Param("questionId") Long questionId,
26-
Pageable pageable
26+
@Param("questionId") Long questionId,
27+
Pageable pageable
2728
);
2829

2930
@Query("""
30-
SELECT a
31-
FROM Answer a
32-
JOIN FETCH a.member m
33-
WHERE a.question.id = :questionId
34-
AND (a.createdAt < :lastCreatedAt OR (a.createdAt = :lastCreatedAt AND a.id < :lastId))
35-
ORDER BY a.createdAt DESC, a.id DESC
36-
""")
31+
SELECT a
32+
FROM Answer a
33+
JOIN FETCH a.member m
34+
WHERE a.question.id = :questionId
35+
AND (a.createdAt > :lastCreatedAt OR (a.createdAt = :lastCreatedAt AND a.id > :lastId))
36+
ORDER BY a.createdAt ASC, a.id ASC
37+
""")
3738
List<Answer> findByQuestionIdWithCursor(
38-
@Param("questionId") Long questionId,
39-
@Param("lastCreatedAt") LocalDateTime lastCreatedAt,
40-
@Param("lastId") Long lastId,
41-
Pageable pageable
39+
@Param("questionId") Long questionId,
40+
@Param("lastCreatedAt") LocalDateTime lastCreatedAt,
41+
@Param("lastId") Long lastId,
42+
Pageable pageable
4243
);
4344

4445
void deleteByQuestionId(Long questionId);
4546

4647
void deleteByQuestionIn(List<Question> questions);
4748

4849
@Query("""
49-
select count(distinct a.question.id)
50-
from Answer a
51-
where a.question.room.id = :roomId
52-
""")
50+
select count(distinct a.question.id)
51+
from Answer a
52+
where a.question.room.id = :roomId
53+
""")
5354
Long countAnsweredQuestionsByRoomId(@Param("roomId") Long roomId);
5455

5556
@Query("""
56-
select a
57-
from Answer a
58-
where a.question.id in :questionIds
59-
""")
57+
select a
58+
from Answer a
59+
where a.question.id in :questionIds
60+
""")
6061
List<Answer> findAllByQuestionIds(@Param("questionIds") List<Long> questionIds);
6162

6263
}

src/main/java/com/oronaminc/join/room/service/RoomService.java

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,5 @@
11
package com.oronaminc.join.room.service;
22

3-
import static com.oronaminc.join.global.exception.ErrorCode.*;
4-
5-
import java.util.List;
6-
import java.util.Map;
7-
import java.util.stream.Collectors;
8-
9-
import org.springframework.cache.annotation.CacheEvict;
10-
import org.springframework.context.ApplicationEventPublisher;
11-
import org.springframework.stereotype.Service;
12-
import org.springframework.transaction.annotation.Transactional;
13-
143
import com.oronaminc.join.answer.domain.Answer;
154
import com.oronaminc.join.answer.service.AnswerReader;
165
import com.oronaminc.join.document.domain.Document;
@@ -27,23 +16,22 @@
2716
import com.oronaminc.join.room.dao.RoomRepository;
2817
import com.oronaminc.join.room.domain.Room;
2918
import com.oronaminc.join.room.domain.RoomStatus;
30-
import com.oronaminc.join.room.dto.CreateRoomRequest;
31-
import com.oronaminc.join.room.dto.CreateRoomResponse;
32-
import com.oronaminc.join.room.dto.JoinRoomRequest;
33-
import com.oronaminc.join.room.dto.JoinRoomResponse;
34-
import com.oronaminc.join.room.dto.ReportResponse;
19+
import com.oronaminc.join.room.dto.*;
3520
import com.oronaminc.join.room.event.RoomDeleteEvent;
36-
import com.oronaminc.join.room.dto.RoomDetailResponse;
37-
import com.oronaminc.join.room.dto.RoomJoinResponse;
38-
import com.oronaminc.join.room.dto.RoomUpdateInfoResponse;
39-
import com.oronaminc.join.room.dto.RoomUpdateRequest;
40-
import com.oronaminc.join.room.dto.RoomUpdateStatusRequest;
41-
import com.oronaminc.join.room.dto.TopQnAResponse;
4221
import com.oronaminc.join.room.util.CodeGenerator;
4322
import com.oronaminc.join.room.util.RoomMapper;
4423
import com.oronaminc.join.websocket.session.CurrentParticipantManager;
45-
4624
import lombok.RequiredArgsConstructor;
25+
import org.springframework.cache.annotation.CacheEvict;
26+
import org.springframework.context.ApplicationEventPublisher;
27+
import org.springframework.stereotype.Service;
28+
import org.springframework.transaction.annotation.Transactional;
29+
30+
import java.util.List;
31+
import java.util.Map;
32+
import java.util.stream.Collectors;
33+
34+
import static com.oronaminc.join.global.exception.ErrorCode.*;
4735

4836
@Service
4937
@Transactional(readOnly = true)
@@ -139,7 +127,7 @@ public void deleteRoom(Long memberId, Long roomId) {
139127
@Transactional
140128
@CacheEvict(cacheNames = "roomById", key = "#roomId")
141129
public void updateRoomStatus(Long memberId, Long roomId,
142-
RoomUpdateStatusRequest roomUpdateStatusRequest) {
130+
RoomUpdateStatusRequest roomUpdateStatusRequest) {
143131
participantService.validatePresenter(roomId, memberId);
144132
Room room = roomReader.getById(roomId);
145133

@@ -215,9 +203,12 @@ private List<TopQnAResponse> getTopQnA(Long roomId) {
215203
}
216204

217205
private Double calculateAnswerRate(Long totalQuestions, Long totalAnswerByQuestion) {
218-
return (totalQuestions == 0)
219-
? 0.0
220-
: ((double)totalAnswerByQuestion / totalQuestions) * 100;
206+
if (totalQuestions == 0) {
207+
return 0.0;
208+
}
209+
210+
double rate = ((double) totalAnswerByQuestion / totalQuestions) * 100;
211+
return Math.round(rate * 10.0) / 10.0;
221212

222213
}
223214

0 commit comments

Comments
 (0)