Skip to content

Commit

Permalink
fix: totalCount DTO 변환 (#133)
Browse files Browse the repository at this point in the history
* fix: totalCount DTO 변환

* test: 테스트 코드 작성 및 Transactional readOnly = true 추가
  • Loading branch information
char-yb authored Aug 16, 2024
1 parent 1f7b5fe commit 653d51b
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
import com.depromeet.stonebed.domain.missionRecord.domain.MissionRecordStatus;
import com.depromeet.stonebed.global.util.FcmNotificationUtil;
import com.google.firebase.messaging.Notification;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
Expand Down Expand Up @@ -41,7 +41,7 @@ public void sendDailyNotification() {

// 매일 18시 0분에 실행
@Scheduled(cron = "0 0 18 * * ?")
public void sendReminderToIncompleteMissions() throws IOException {
public void sendReminderToIncompleteMissions() {
Notification notification =
FcmNotificationUtil.buildNotification("리마인드 메세지 제목", "리마인드 메세지 내용");
List<String> tokens = getIncompleteMissionTokens();
Expand All @@ -59,7 +59,7 @@ private List<String> getIncompleteMissionTokens() {
.orElse(null);
return fcmToken != null ? fcmToken.getToken() : null;
})
.filter(token -> token != null)
.filter(Objects::nonNull)
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.depromeet.stonebed.domain.fcm.domain.FcmResponseErrorType;
import com.google.firebase.messaging.*;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -33,8 +32,7 @@ public void sendMulticastMessageToAll(Notification notification) {
}

@Transactional
public void sendMulticastMessage(Notification notification, List<String> tokens)
throws IOException {
public void sendMulticastMessage(Notification notification, List<String> tokens) {
int totalTokens = tokens.size();

for (int i = 0; i < totalTokens; i += BATCH_SIZE) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.depromeet.stonebed.domain.missionRecord.dto.request.MissionRecordSaveRequest;
import com.depromeet.stonebed.domain.missionRecord.dto.request.MissionRecordStartRequest;
import com.depromeet.stonebed.domain.missionRecord.dto.response.MissionRecordCalendarResponse;
import com.depromeet.stonebed.domain.missionRecord.dto.response.MissionRecordCompleteTotal;
import com.depromeet.stonebed.domain.missionRecord.dto.response.MissionTabResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand Down Expand Up @@ -56,8 +57,8 @@ public MissionRecordCalendarResponse getMissionRecordsForCalendar(
}

@Operation(summary = "수행한 총 미션 기록 수", description = "회원이 수행한 총 미션 기록 수를 조회한다.")
@PostMapping("/complete/total")
public Long getTotalMissionRecords() {
@GetMapping("/complete/total")
public MissionRecordCompleteTotal getTotalMissionRecords() {
return missionRecordService.getTotalMissionRecords();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.depromeet.stonebed.domain.missionRecord.domain.MissionRecordStatus;
import com.depromeet.stonebed.domain.missionRecord.dto.response.MissionRecordCalendarDto;
import com.depromeet.stonebed.domain.missionRecord.dto.response.MissionRecordCalendarResponse;
import com.depromeet.stonebed.domain.missionRecord.dto.response.MissionRecordCompleteTotal;
import com.depromeet.stonebed.domain.missionRecord.dto.response.MissionTabResponse;
import com.depromeet.stonebed.global.error.ErrorCode;
import com.depromeet.stonebed.global.error.exception.CustomException;
Expand Down Expand Up @@ -163,10 +164,14 @@ public void updateMissionRecordWithImage(Long recordId, String imageUrl) {
missionRecord.updateImageUrl(imageUrl);
}

public Long getTotalMissionRecords() {
@Transactional(readOnly = true)
public MissionRecordCompleteTotal getTotalMissionRecords() {
final Member member = memberUtil.getCurrentMember();
return missionRecordRepository.countByMemberIdAndStatus(
member.getId(), MissionRecordStatus.COMPLETED);
Long totalCount =
missionRecordRepository.countByMemberIdAndStatus(
member.getId(), MissionRecordStatus.COMPLETED);

return MissionRecordCompleteTotal.of(totalCount);
}

public void updateExpiredMissionsToNotCompleted() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.depromeet.stonebed.domain.missionRecord.dto.response;

import io.swagger.v3.oas.annotations.media.Schema;

public record MissionRecordCompleteTotal(
@Schema(description = "수행한 총 미션 기록 수", example = "123") Long totalCount) {

public static MissionRecordCompleteTotal of(Long totalCount) {
return new MissionRecordCompleteTotal(totalCount);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.depromeet.stonebed.domain.missionRecord.domain.MissionRecordStatus;
import com.depromeet.stonebed.domain.missionRecord.dto.request.MissionRecordSaveRequest;
import com.depromeet.stonebed.domain.missionRecord.dto.response.MissionRecordCalendarResponse;
import com.depromeet.stonebed.domain.missionRecord.dto.response.MissionRecordCompleteTotal;
import com.depromeet.stonebed.global.error.ErrorCode;
import com.depromeet.stonebed.global.error.exception.CustomException;
import com.depromeet.stonebed.global.util.MemberUtil;
Expand Down Expand Up @@ -169,4 +170,34 @@ class MissionRecordServiceTest extends FixtureMonkeySetUp {
verify(missionRecordRepository).findByMemberAndMissionHistory(member, missionHistory);
verify(missionRecordRepository).save(any(MissionRecord.class));
}

@Test
void 완료한_미션_수를_조회합니다() {
// given
Member member = fixtureMonkey.giveMeOne(Member.class);

// Create a list of mission records with 3 COMPLETED statuses
List<MissionRecord> missionRecords =
fixtureMonkey
.giveMeBuilder(MissionRecord.class)
.set("member", member)
.set("status", MissionRecordStatus.COMPLETED)
.sampleList(3);

when(memberUtil.getCurrentMember()).thenReturn(member);
when(missionRecordRepository.countByMemberIdAndStatus(
member.getId(), MissionRecordStatus.COMPLETED))
.thenReturn((long) missionRecords.size());

// when
MissionRecordCompleteTotal completedMissionCount =
missionRecordService.getTotalMissionRecords();

// then
then(completedMissionCount.totalCount()).isEqualTo(3);

verify(memberUtil).getCurrentMember();
verify(missionRecordRepository)
.countByMemberIdAndStatus(member.getId(), MissionRecordStatus.COMPLETED);
}
}

0 comments on commit 653d51b

Please sign in to comment.