diff --git a/src/main/java/com/oronaminc/join/answer/dao/AnswerRepository.java b/src/main/java/com/oronaminc/join/answer/dao/AnswerRepository.java index d06e03a..dcaf09d 100644 --- a/src/main/java/com/oronaminc/join/answer/dao/AnswerRepository.java +++ b/src/main/java/com/oronaminc/join/answer/dao/AnswerRepository.java @@ -2,43 +2,44 @@ import com.oronaminc.join.answer.domain.Answer; import com.oronaminc.join.question.domain.Question; -import java.time.LocalDateTime; -import java.util.List; -import java.util.Optional; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; + public interface AnswerRepository extends JpaRepository { Optional findByQuestionId(Long questionId); @Query(""" - SELECT a - FROM Answer a - JOIN FETCH a.member m - WHERE a.question.id = :questionId - ORDER BY a.createdAt DESC, a.id DESC - """) + SELECT a + FROM Answer a + JOIN FETCH a.member m + WHERE a.question.id = :questionId + ORDER BY a.createdAt ASC, a.id ASC + """) List findFirstPageByQuestionId( - @Param("questionId") Long questionId, - Pageable pageable + @Param("questionId") Long questionId, + Pageable pageable ); @Query(""" - SELECT a - FROM Answer a - JOIN FETCH a.member m - WHERE a.question.id = :questionId - AND (a.createdAt < :lastCreatedAt OR (a.createdAt = :lastCreatedAt AND a.id < :lastId)) - ORDER BY a.createdAt DESC, a.id DESC - """) + SELECT a + FROM Answer a + JOIN FETCH a.member m + WHERE a.question.id = :questionId + AND (a.createdAt > :lastCreatedAt OR (a.createdAt = :lastCreatedAt AND a.id > :lastId)) + ORDER BY a.createdAt ASC, a.id ASC + """) List findByQuestionIdWithCursor( - @Param("questionId") Long questionId, - @Param("lastCreatedAt") LocalDateTime lastCreatedAt, - @Param("lastId") Long lastId, - Pageable pageable + @Param("questionId") Long questionId, + @Param("lastCreatedAt") LocalDateTime lastCreatedAt, + @Param("lastId") Long lastId, + Pageable pageable ); void deleteByQuestionId(Long questionId); @@ -46,17 +47,17 @@ List findByQuestionIdWithCursor( void deleteByQuestionIn(List questions); @Query(""" - select count(distinct a.question.id) - from Answer a - where a.question.room.id = :roomId - """) + select count(distinct a.question.id) + from Answer a + where a.question.room.id = :roomId + """) Long countAnsweredQuestionsByRoomId(@Param("roomId") Long roomId); @Query(""" - select a - from Answer a - where a.question.id in :questionIds - """) + select a + from Answer a + where a.question.id in :questionIds + """) List findAllByQuestionIds(@Param("questionIds") List questionIds); } diff --git a/src/main/java/com/oronaminc/join/room/service/RoomService.java b/src/main/java/com/oronaminc/join/room/service/RoomService.java index 9f04704..cbf3cbe 100644 --- a/src/main/java/com/oronaminc/join/room/service/RoomService.java +++ b/src/main/java/com/oronaminc/join/room/service/RoomService.java @@ -1,16 +1,5 @@ package com.oronaminc.join.room.service; -import static com.oronaminc.join.global.exception.ErrorCode.*; - -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - import com.oronaminc.join.answer.domain.Answer; import com.oronaminc.join.answer.service.AnswerReader; import com.oronaminc.join.document.domain.Document; @@ -27,23 +16,22 @@ import com.oronaminc.join.room.dao.RoomRepository; import com.oronaminc.join.room.domain.Room; import com.oronaminc.join.room.domain.RoomStatus; -import com.oronaminc.join.room.dto.CreateRoomRequest; -import com.oronaminc.join.room.dto.CreateRoomResponse; -import com.oronaminc.join.room.dto.JoinRoomRequest; -import com.oronaminc.join.room.dto.JoinRoomResponse; -import com.oronaminc.join.room.dto.ReportResponse; +import com.oronaminc.join.room.dto.*; import com.oronaminc.join.room.event.RoomDeleteEvent; -import com.oronaminc.join.room.dto.RoomDetailResponse; -import com.oronaminc.join.room.dto.RoomJoinResponse; -import com.oronaminc.join.room.dto.RoomUpdateInfoResponse; -import com.oronaminc.join.room.dto.RoomUpdateRequest; -import com.oronaminc.join.room.dto.RoomUpdateStatusRequest; -import com.oronaminc.join.room.dto.TopQnAResponse; import com.oronaminc.join.room.util.CodeGenerator; import com.oronaminc.join.room.util.RoomMapper; import com.oronaminc.join.websocket.session.CurrentParticipantManager; - import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static com.oronaminc.join.global.exception.ErrorCode.*; @Service @Transactional(readOnly = true) @@ -139,7 +127,7 @@ public void deleteRoom(Long memberId, Long roomId) { @Transactional @CacheEvict(cacheNames = "roomById", key = "#roomId") public void updateRoomStatus(Long memberId, Long roomId, - RoomUpdateStatusRequest roomUpdateStatusRequest) { + RoomUpdateStatusRequest roomUpdateStatusRequest) { participantService.validatePresenter(roomId, memberId); Room room = roomReader.getById(roomId); @@ -215,9 +203,12 @@ private List getTopQnA(Long roomId) { } private Double calculateAnswerRate(Long totalQuestions, Long totalAnswerByQuestion) { - return (totalQuestions == 0) - ? 0.0 - : ((double)totalAnswerByQuestion / totalQuestions) * 100; + if (totalQuestions == 0) { + return 0.0; + } + + double rate = ((double) totalAnswerByQuestion / totalQuestions) * 100; + return Math.round(rate * 10.0) / 10.0; }