Skip to content

Commit 6a9b555

Browse files
authored
Merge pull request #41 from Modo-Library/feature/loginAndRegister_NM-10
[FEAT] Account Delete API (NM-128)
2 parents 76ae8b5 + 260666e commit 6a9b555

File tree

6 files changed

+102
-9
lines changed

6 files changed

+102
-9
lines changed

src/docs/asciidoc/users.adoc

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ operation::Users-changeLocation[snippets='http-request,request-headers,path-para
4141
[[Users-logout]]
4242
== Users-logout
4343

44-
* AccessToken을 header로 담아서 요청만 보내주시면 되고, responseBody는 비어있는 채로 200번 응답이 온다면 성공적으로 logout이 완료된 것 입니다##.##
44+
* AccessToken을 header로 담아서 요청만 보내주시면 되고, responseBody는 비어있는 채로 200번 응답이 온다면 성공적으로 logout이 완료된 것 입니다.
4545

46-
operation::Users-logout[snippets='http-request,request-headers,http-response']
46+
operation::Users-logout[snippets='http-request,request-headers,http-response']
47+
48+
[[Users-delete]]
49+
== Users-delete
50+
51+
* logout과 마찬가지로 responseBody가 비어있는 채로 200번 응답이 온다면 성공적으로 delete(회원탈퇴)가 완료된 것 입니다.
52+
53+
operation::Users-delete[snippets='http-request,request-headers,http-response']

src/main/java/modo/controller/UsersController.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,10 @@ public ResponseEntity<?> logout(@RequestHeader(value = "token") String token) {
5959
return sendResponse();
6060
}
6161

62+
@DeleteMapping("api/v1/users/delete")
63+
public ResponseEntity<?> delete(@RequestHeader(value = "token") String token) {
64+
usersService.delete(token);
65+
return sendResponse();
66+
}
67+
6268
}

src/main/java/modo/service/UsersService.java

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212
import modo.domain.entity.Users;
1313
import modo.domain.entity.UsersHistory;
1414
import modo.domain.entity.UsersReview;
15-
import modo.repository.UsersHistoryRepository;
16-
import modo.repository.UsersRepository;
17-
import modo.repository.UsersReviewRepository;
15+
import modo.repository.*;
1816
import org.springframework.stereotype.Service;
1917
import org.springframework.transaction.annotation.Transactional;
2018

@@ -27,6 +25,10 @@ public class UsersService {
2725
private final UsersHistoryRepository usersHistoryRepository;
2826
private final UsersReviewRepository usersReviewRepository;
2927
private final JwtTokenProvider jwtTokenProvider;
28+
private final ChatRoomsRepository chatRoomsRepository;
29+
private final LikesRepository likesRepository;
30+
private final UsersBooksHistoryRepository usersBooksHistoryRepository;
31+
private final BooksRepository booksRepository;
3032

3133
@Transactional
3234
public UsersResponseDto save(UsersSaveRequestDto usersSaveRequestDto) {
@@ -160,6 +162,35 @@ public void logout(String accessToken) {
160162
jwtTokenProvider.expireAllToken(usersId);
161163
}
162164

165+
@Transactional
166+
public void delete(String token) {
167+
logout(token);
168+
String usersId = jwtTokenProvider.getUsersId(token);
169+
Users users = findUsersInRepository(usersId);
170+
usersRepository.delete(users);
171+
// users.getChatRoomsList().stream()
172+
// .forEach(each -> {
173+
// chatRoomsRepository.delete(each);
174+
// });
175+
// users.getBooksList().stream()
176+
// .forEach((each -> {
177+
// booksRepository.delete(each);
178+
// }));
179+
// users.getUsersBooksHistoryList().stream()
180+
// .forEach((each -> {
181+
// usersBooksHistoryRepository.delete(each);
182+
// }));
183+
// users.getLikesList().stream()
184+
// .forEach((each -> {
185+
// likesRepository.delete(each);
186+
// }));
187+
// users.getUsersReviewList().stream()
188+
// .forEach((each -> {
189+
// usersReviewRepository.delete(each);
190+
// }));
191+
// usersHistoryRepository.delete(users.getUsersHistory());
192+
}
193+
163194
private Users findUsersInRepository(String usersId) {
164195
return usersRepository.findById(usersId).orElseThrow(
165196
() -> new IllegalArgumentException("Users with id : " + usersId + " is not exist")

src/test/java/modo/Books/BooksServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ void injectRepositoryToUsersService() {
360360
}
361361

362362

363-
private void saveTestBooksAndPicturesList() {
363+
void saveTestBooksAndPicturesList() {
364364
PicturesSaveRequestDto requestDto1 = PicturesSaveRequestDto.builder()
365365
.imgUrl(testImgUrl + "1")
366366
.filename(testFilename + "1")

src/test/java/modo/users/UsersIntegrationTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,34 @@ void tearDown() {
439439
assertThat(refreshTokenRepository.findById(testUsersId)).isEmpty();
440440
}
441441

442+
@Test
443+
void Integration_회원탈퇴_테스트() throws Exception {
444+
// Save Users First
445+
mockMvc.perform(post("/api/v2/users/save")
446+
.contentType(MediaType.APPLICATION_JSON)
447+
.content(objectMapper.writeValueAsString(testUsersSaveRequestDto))
448+
)
449+
.andExpect(status().isOk());
450+
451+
accessToken = jwtTokenProvider.createAccessToken(testUsersId);
452+
453+
mockMvc.perform(delete("/api/v1/users/delete")
454+
.contentType(MediaType.APPLICATION_JSON)
455+
.header("token", accessToken)
456+
)
457+
.andExpect(status().isOk())
458+
.andDo(document("Users-delete",
459+
Preprocessors.preprocessRequest(Preprocessors.prettyPrint()),
460+
Preprocessors.preprocessResponse(Preprocessors.prettyPrint()),
461+
requestHeaders(
462+
headerWithName("token").description("Access Token value")
463+
)))
464+
.andDo(print());
465+
466+
assertThat(usersRepository.findById(testUsersId)).isEmpty();
467+
assertThat(usersHistoryRepository.findById(testUsersId)).isEmpty();
468+
}
469+
442470

443471
static final String testUsersId = "testUsersId";
444472
static final String testNickname = "testNickname";

src/test/java/modo/users/UsersServiceTest.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525

2626
import static org.assertj.core.api.Assertions.assertThat;
2727
import static org.junit.jupiter.api.Assertions.assertThrows;
28+
import static org.mockito.ArgumentMatchers.any;
29+
import static org.mockito.Mockito.when;
2830

2931
@DataJpaTest
3032
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@@ -48,10 +50,16 @@ public class UsersServiceTest {
4850
PicturesRepository picturesRepository;
4951

5052
@Autowired
51-
private ChatRoomsRepository chatRoomsRepository;
53+
ChatRoomsRepository chatRoomsRepository;
5254

5355
@Autowired
54-
private ChatMessagesRepository chatMessagesRepository;
56+
ChatMessagesRepository chatMessagesRepository;
57+
58+
@Autowired
59+
LikesRepository likesRepository;
60+
61+
@Autowired
62+
UsersBooksHistoryRepository usersBooksHistoryRepository;
5563

5664

5765
@Mock
@@ -71,7 +79,7 @@ void tearDown() {
7179

7280
@BeforeEach
7381
void injectRepositoryToUsersService() {
74-
usersService = new UsersService(usersRepository, usersHistoryRepository, usersReviewRepository, jwtTokenProvider);
82+
usersService = new UsersService(usersRepository, usersHistoryRepository, usersReviewRepository, jwtTokenProvider, chatRoomsRepository, likesRepository, usersBooksHistoryRepository, booksRepository);
7583
}
7684

7785
@Test
@@ -532,6 +540,19 @@ void injectRepositoryToUsersService() {
532540
assertThat(result).isEqualTo(testUsersId);
533541
}
534542

543+
@Test
544+
void Service_회원탈퇴_테스트() {
545+
UsersResponseDto resultResponseDto = usersService.save(testUsersSaveRequestDto);
546+
547+
when(jwtTokenProvider.getUsersId(any())).thenReturn(testUsersId);
548+
549+
usersService.delete("DummyTokenValue");
550+
551+
assertThat(usersRepository.findAll().size()).isEqualTo(0);
552+
assertThat(usersReviewRepository.findAll().size()).isEqualTo(0);
553+
assertThat(usersHistoryRepository.findAll().size()).isEqualTo(0);
554+
}
555+
535556
static final String testUsersId = "testUsersId";
536557
static final String testNickname = "testNickname";
537558
static final String testSub = "testSub";

0 commit comments

Comments
 (0)