Skip to content

Commit

Permalink
(SKP-198) [Server] 회원 탈퇴 API 버그를 수정한다 (#159)
Browse files Browse the repository at this point in the history
* docs: update .gitignore

* bug: 회원 탈퇴시 알림, 친구 데이터 삭제
  • Loading branch information
chaeeerish authored Sep 26, 2024
1 parent 3ee274e commit 342cb43
Show file tree
Hide file tree
Showing 16 changed files with 98 additions and 15 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ src/main/resources/application-tour.yml
src/main/resources/application-weather.yml
src/main/resources/AuthKey_WNM333A5H4.p8
src/main/resources/skeep-fcm.json
src/test/resources/skeep-fcm.json

.idea
HELP.md
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public ResponseEntity<Void> deleteUserCategory(
@UserId Long userId,
@PathVariable("userCategoryId") Long userCategoryId
) {
userCategoryRemover.deleteUserCategory(userId, userCategoryId);
userCategoryRemover.deleteByUserIdAndUserCategoryId(userId, userCategoryId);
return ResponseEntity.ok().build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,12 @@ public class UserCategoryRemover {
private final UserCategoryRepository userCategoryRepository;

@Transactional
public void deleteUserCategory(Long userId, Long userCategoryId) {
public void deleteByUser(User user) {
userCategoryRepository.deleteAllByUser(user);
}

@Transactional
public void deleteByUserIdAndUserCategoryId(Long userId, Long userCategoryId) {
User user = userFindService.findById(userId);
UserCategory userCategory = userCategoryRetriever.findById(userCategoryId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
import Skeep.backend.user.service.UserFindService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class UserCategoryService {
private final UserCategoryRetriever userCategoryRetriever;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,6 @@ public interface FriendRepository extends JpaRepository<Friend, Long> {
Optional<Friend> findByToken(String token);
Boolean existsByUser1AndUser2(User user1, User user2);
void deleteByUser1AndUser2(User user1, User user2);
void deleteByUser1(User user1);
void deleteByUser2(User user2);
}
6 changes: 6 additions & 0 deletions src/main/java/Skeep/backend/friend/service/FriendRemover.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,10 @@ public class FriendRemover {
public void deleteByUser1AndUser2(User user1, User user2) {
friendRepository.deleteByUser1AndUser2(user1, user2);
}

@Transactional
public void deleteByUser(User user) {
friendRepository.deleteByUser1(user);
friendRepository.deleteByUser2(user);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
import Skeep.backend.user.domain.User;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Component
@Service
@RequiredArgsConstructor
public class FriendRetriever {
private final FriendRepository friendRepository;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
public class UserLocationRemover {
private final UserLocationRepository userLocationRepository;

public void deleteByUser(User user) {
userLocationRepository.deleteAllByUser(user);
}

public void deleteByUserIdAndId(User user, Long userLocationId) {
userLocationRepository.deleteByUserAndId(user, userLocationId);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@
public interface CategoryNotificationRepository extends JpaRepository<CategoryNotification, Long> {
List<CategoryNotification> findAllByUser(User user);
Optional<CategoryNotification> findByUserAndId(User user, Long id);
void deleteByUser(User user);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@
public interface UserLocationNotificationRepository extends JpaRepository<UserLocationNotification, Long> {
List<UserLocationNotification> findAllByUser(User user);
Optional<UserLocationNotification> findByUserAndId(User user, Long id);
void deleteByUser(User user);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package Skeep.backend.notification.service;

import Skeep.backend.notification.domain.CategoryNotification.CategoryNotificationRepository;
import Skeep.backend.notification.domain.UserLocationNotification.UserLocationNotificationRepository;
import Skeep.backend.user.domain.User;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@Component
@RequiredArgsConstructor
public class NotificationRemover {
private final CategoryNotificationRepository categoryNotificationRepository;
private final UserLocationNotificationRepository userLocationNotificationRepository;

@Transactional
public void deleteByUser(User user) {
categoryNotificationRepository.deleteByUser(user);
userLocationNotificationRepository.deleteByUser(user);
}
}
18 changes: 18 additions & 0 deletions src/main/java/Skeep/backend/user/service/UserRemover.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package Skeep.backend.user.service;

import Skeep.backend.user.domain.User;
import Skeep.backend.user.domain.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@Component
@RequiredArgsConstructor
public class UserRemover {
private final UserRepository userRepository;

@Transactional
public void deleteUser(User user) {
userRepository.delete(user);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

import Skeep.backend.auth.jwt.service.JwtTokenService;
import Skeep.backend.category.domain.UserCategoryRepository;
import Skeep.backend.category.service.UserCategoryRemover;
import Skeep.backend.friend.service.FriendRemover;
import Skeep.backend.location.userLocation.domain.UserLocationRepository;
import Skeep.backend.location.userLocation.service.UserLocationRemover;
import Skeep.backend.notification.service.NotificationRemover;
import Skeep.backend.user.domain.User;
import Skeep.backend.user.domain.UserRepository;
import lombok.RequiredArgsConstructor;
Expand All @@ -16,19 +20,24 @@ public class UserWithdrawalService {
private final UserFindService userFindService;
private final JwtTokenService jwtTokenService;

private final UserRepository userRepository;
private final UserLocationRepository userLocationRepository;
private final UserCategoryRepository userCategoryRepository;

private final UserRemover userRemover;
private final NotificationRemover notificationRemover;
private final UserLocationRemover userLocationRemover;
private final UserCategoryRemover userCategoryRemover;
private final FriendRemover friendRemover;

@Transactional
public void withdrawal(Long userId) {
jwtTokenService.deleteRefreshToken(userId);

User user = userFindService.findById(userId);

userLocationRepository.deleteAllByUser(user);
userCategoryRepository.deleteAllByUser(user);
userRepository.delete(user);
notificationRemover.deleteByUser(user);

userLocationRemover.deleteByUser(user);
userCategoryRemover.deleteByUser(user);
friendRemover.deleteByUser(user);

userRemover.deleteUser(user);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;

import static Skeep.backend.fixture.TokenFixture.ACCESS_TOKEN;
Expand Down Expand Up @@ -114,7 +112,7 @@ class deleteUserCategory {
// given
doNothing()
.when(userCategoryRemover)
.deleteUserCategory(anyLong(), anyLong());
.deleteByUserIdAndUserCategoryId(anyLong(), anyLong());

// when
MockHttpServletRequestBuilder requestBuilder = delete(BASE_URL, 1L)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class UserCategoryRemoverTest extends ServiceTest {
UserCategory userCategory2 = userCategoryRepository.save(ACTIVITY.toUserCategory(user2));

// when - then
assertThatThrownBy(() -> userCategoryRemover.deleteUserCategory(user1.getId(), userCategory2.getId()))
assertThatThrownBy(() -> userCategoryRemover.deleteByUserIdAndUserCategoryId(user1.getId(), userCategory2.getId()))
.isInstanceOf(BaseException.class)
.hasMessageContaining(UserCategoryErrorCode.USER_CATEGORY_NOT_MATCHED.getMessage());
}
Expand All @@ -49,7 +49,7 @@ class UserCategoryRemoverTest extends ServiceTest {
userCategoryRepository.save(ACTIVITY.toUserCategory(user));

// when
userCategoryRemover.deleteUserCategory(user.getId(), 1L);
userCategoryRemover.deleteByUserIdAndUserCategoryId(user.getId(), 1L);

// then
List<UserCategory> userCategoryList = userCategoryRepository.findAllByUserId(user.getId());
Expand Down
14 changes: 14 additions & 0 deletions src/test/resources/skeep-fcm.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"type": "abc",
"project_id": "abc",
"private_key_id": "abc",
"private_key": "abc",
"client_email": "abc",
"client_id": "abc",
"auth_uri": "abc",
"token_uri": "abc",
"auth_provider_x509_cert_url": "abc",
"client_x509_cert_url": "abc",
"universe_domain": "abc"
}

0 comments on commit 342cb43

Please sign in to comment.