Skip to content

Commit fd15aff

Browse files
committed
fix: 회원 탈퇴 시 난이도 피드백 먼저 삭제
1 parent 0f3ad92 commit fd15aff

3 files changed

Lines changed: 22 additions & 0 deletions

File tree

src/main/java/com/semosan/api/domain/hiking/repository/CourseDifficultyFeedbackRepository.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,13 @@
33
import com.semosan.api.domain.hiking.entity.CourseDifficultyFeedback;
44
import org.springframework.data.jpa.repository.JpaRepository;
55

6+
import java.util.List;
7+
68
public interface CourseDifficultyFeedbackRepository extends JpaRepository<CourseDifficultyFeedback, Long> {
79

810
boolean existsByHikingRecord_Id(Long hikingRecordId);
11+
12+
void deleteByUser_Id(Long userId);
13+
14+
void deleteByHikingRecord_IdIn(List<Long> hikingRecordIds);
915
}

src/main/java/com/semosan/api/domain/user/service/UserService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.semosan.api.common.exception.GeneralException;
44
import com.semosan.api.common.status.ErrorStatus;
5+
import com.semosan.api.domain.hiking.repository.CourseDifficultyFeedbackRepository;
56
import com.semosan.api.domain.hiking.repository.HikingMemberRepository;
67
import com.semosan.api.domain.hiking.repository.HikingRecordRepository;
78
import com.semosan.api.domain.mountain.repository.CourseLikeRepository;
@@ -38,6 +39,7 @@ public class UserService {
3839
private final ReviewRepository reviewRepository;
3940
private final HikingMemberRepository hikingMemberRepository;
4041
private final HikingRecordRepository hikingRecordRepository;
42+
private final CourseDifficultyFeedbackRepository courseDifficultyFeedbackRepository;
4143
private final NotificationRepository notificationRepository;
4244
private final DefaultNicknameGenerator defaultNicknameGenerator;
4345
private final NicknamePolicy nicknamePolicy;
@@ -147,9 +149,11 @@ private void deleteUserChildRecords(Long userId) {
147149
mountainLikeRepository.deleteByUser_Id(userId);
148150
courseLikeRepository.deleteByUser_Id(userId);
149151
reviewRepository.deleteByUser_Id(userId);
152+
courseDifficultyFeedbackRepository.deleteByUser_Id(userId);
150153
List<Long> recordIdsToDelete = hikingRecordRepository.findRecordIdsOnlyParticipatedByUser(userId);
151154
hikingMemberRepository.deleteByUser_Id(userId);
152155
if (!recordIdsToDelete.isEmpty()) {
156+
courseDifficultyFeedbackRepository.deleteByHikingRecord_IdIn(recordIdsToDelete);
153157
hikingRecordRepository.deleteAllByIdInBatch(recordIdsToDelete);
154158
}
155159
notificationRepository.deleteAllByUserId(userId);

src/test/java/com/semosan/api/domain/user/service/UserServiceTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.semosan.api.domain.user.service;
22

3+
import com.semosan.api.domain.hiking.repository.CourseDifficultyFeedbackRepository;
34
import com.semosan.api.domain.hiking.repository.HikingMemberRepository;
45
import com.semosan.api.domain.hiking.repository.HikingRecordRepository;
56
import com.semosan.api.domain.mountain.repository.CourseLikeRepository;
@@ -17,6 +18,7 @@
1718
import com.semosan.api.domain.user.repository.UserRepository;
1819
import org.junit.jupiter.api.Test;
1920
import org.junit.jupiter.api.extension.ExtendWith;
21+
import org.mockito.InOrder;
2022
import org.mockito.InjectMocks;
2123
import org.mockito.Mock;
2224
import org.mockito.junit.jupiter.MockitoExtension;
@@ -27,6 +29,7 @@
2729

2830
import static org.assertj.core.api.Assertions.assertThat;
2931
import static org.mockito.ArgumentMatchers.any;
32+
import static org.mockito.Mockito.inOrder;
3033
import static org.mockito.Mockito.verify;
3134
import static org.mockito.Mockito.when;
3235

@@ -57,6 +60,9 @@ class UserServiceTest {
5760
@Mock
5861
private HikingRecordRepository hikingRecordRepository;
5962

63+
@Mock
64+
private CourseDifficultyFeedbackRepository courseDifficultyFeedbackRepository;
65+
6066
@Mock
6167
private NotificationRepository notificationRepository;
6268

@@ -173,8 +179,10 @@ void withdrawUserDeletesUserChildRecordsAndSoftDeletesUser() {
173179

174180
verify(mountainLikeRepository).deleteByUser_Id(1L);
175181
verify(reviewRepository).deleteByUser_Id(1L);
182+
verify(courseDifficultyFeedbackRepository).deleteByUser_Id(1L);
176183
verify(hikingRecordRepository).findRecordIdsOnlyParticipatedByUser(1L);
177184
verify(hikingMemberRepository).deleteByUser_Id(1L);
185+
verify(courseDifficultyFeedbackRepository).deleteByHikingRecord_IdIn(List.of(10L, 11L));
178186
verify(hikingRecordRepository).deleteAllByIdInBatch(List.of(10L, 11L));
179187
verify(notificationRepository).deleteAllByUserId(1L);
180188
verify(userOnboardingRepository).deleteByUser_Id(1L);
@@ -187,5 +195,9 @@ void withdrawUserDeletesUserChildRecordsAndSoftDeletesUser() {
187195
assertThat(user.getNickname()).isNull();
188196
assertThat(user.getOauthId()).isEqualTo("WITHDRAWN:1:TEST");
189197
assertThat(user.getOnboardingStatus()).isEqualTo(OnboardingStatus.INCOMPLETE);
198+
199+
InOrder deleteOrder = inOrder(courseDifficultyFeedbackRepository, hikingRecordRepository);
200+
deleteOrder.verify(courseDifficultyFeedbackRepository).deleteByHikingRecord_IdIn(List.of(10L, 11L));
201+
deleteOrder.verify(hikingRecordRepository).deleteAllByIdInBatch(List.of(10L, 11L));
190202
}
191203
}

0 commit comments

Comments
 (0)