From 059cb9cc81e2425f7e6316e38948dad7e41e16d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=B0=AC=EA=B8=B0?= Date: Sun, 8 Sep 2024 13:00:41 +0900 Subject: [PATCH] feat: Withdraw user (#150) --- .../java/org/example/entity/BaseEntity.java | 2 +- .../interest/InterestShowRepository.java | 2 ++ .../ArtistSubscriptionRepository.java | 2 ++ .../GenreSubscriptionRepository.java | 2 ++ .../ticketing/TicketingAlertRepository.java | 1 + .../user/SocialLoginRepository.java | 2 ++ .../repository/user/UserRepository.java | 2 -- .../java/org/example/usecase/UserUseCase.java | 20 +++++++++++++++++-- 8 files changed, 28 insertions(+), 5 deletions(-) diff --git a/app/domain/common-domain/src/main/java/org/example/entity/BaseEntity.java b/app/domain/common-domain/src/main/java/org/example/entity/BaseEntity.java index 93035c9d..57eb7d67 100644 --- a/app/domain/common-domain/src/main/java/org/example/entity/BaseEntity.java +++ b/app/domain/common-domain/src/main/java/org/example/entity/BaseEntity.java @@ -44,7 +44,7 @@ public void revive() { @Override public boolean isNew() { - return id != null; + return createdAt == null; } @Override diff --git a/app/domain/user-domain/src/main/java/org/example/repository/interest/InterestShowRepository.java b/app/domain/user-domain/src/main/java/org/example/repository/interest/InterestShowRepository.java index d0cf11c4..bcf8f042 100644 --- a/app/domain/user-domain/src/main/java/org/example/repository/interest/InterestShowRepository.java +++ b/app/domain/user-domain/src/main/java/org/example/repository/interest/InterestShowRepository.java @@ -12,4 +12,6 @@ public interface InterestShowRepository extends JpaRepository findByShowIdAndUserIdAndIsDeletedFalse(UUID showId, UUID userId); Long countInterestShowByUserIdAndIsDeletedFalse(UUID userId); + + void deleteAllByUserId(UUID userId); } diff --git a/app/domain/user-domain/src/main/java/org/example/repository/subscription/artistsubscription/ArtistSubscriptionRepository.java b/app/domain/user-domain/src/main/java/org/example/repository/subscription/artistsubscription/ArtistSubscriptionRepository.java index 16904fab..dabde51a 100644 --- a/app/domain/user-domain/src/main/java/org/example/repository/subscription/artistsubscription/ArtistSubscriptionRepository.java +++ b/app/domain/user-domain/src/main/java/org/example/repository/subscription/artistsubscription/ArtistSubscriptionRepository.java @@ -13,4 +13,6 @@ public interface ArtistSubscriptionRepository List findAllByUserIdAndIsDeletedFalse(UUID userId); Long countByUserIdAndIsDeletedFalse(UUID userId); + + void deleteAllByUserId(UUID userId); } diff --git a/app/domain/user-domain/src/main/java/org/example/repository/subscription/genresubscription/GenreSubscriptionRepository.java b/app/domain/user-domain/src/main/java/org/example/repository/subscription/genresubscription/GenreSubscriptionRepository.java index 698176b1..f961d926 100644 --- a/app/domain/user-domain/src/main/java/org/example/repository/subscription/genresubscription/GenreSubscriptionRepository.java +++ b/app/domain/user-domain/src/main/java/org/example/repository/subscription/genresubscription/GenreSubscriptionRepository.java @@ -13,4 +13,6 @@ public interface GenreSubscriptionRepository extends JpaRepository findByUserIdAndIsDeletedFalse(UUID userId); Long countByUserIdAndIsDeletedFalse(UUID uuid); + + void deleteAllByUserId(UUID userId); } diff --git a/app/domain/user-domain/src/main/java/org/example/repository/ticketing/TicketingAlertRepository.java b/app/domain/user-domain/src/main/java/org/example/repository/ticketing/TicketingAlertRepository.java index 64f2291f..c735f101 100644 --- a/app/domain/user-domain/src/main/java/org/example/repository/ticketing/TicketingAlertRepository.java +++ b/app/domain/user-domain/src/main/java/org/example/repository/ticketing/TicketingAlertRepository.java @@ -12,4 +12,5 @@ public interface TicketingAlertRepository extends JpaRepository findAllByUserIdAndIsDeletedFalse(UUID userId); + void deleteAllByUserId(UUID userId); } diff --git a/app/domain/user-domain/src/main/java/org/example/repository/user/SocialLoginRepository.java b/app/domain/user-domain/src/main/java/org/example/repository/user/SocialLoginRepository.java index 57bf0221..ba3745c5 100644 --- a/app/domain/user-domain/src/main/java/org/example/repository/user/SocialLoginRepository.java +++ b/app/domain/user-domain/src/main/java/org/example/repository/user/SocialLoginRepository.java @@ -12,4 +12,6 @@ Optional findBySocialLoginTypeAndIdentifier( SocialLoginType socialLoginType, String identifier ); + + void deleteAllByUserId(UUID userId); } diff --git a/app/domain/user-domain/src/main/java/org/example/repository/user/UserRepository.java b/app/domain/user-domain/src/main/java/org/example/repository/user/UserRepository.java index 8993c77d..476f7660 100644 --- a/app/domain/user-domain/src/main/java/org/example/repository/user/UserRepository.java +++ b/app/domain/user-domain/src/main/java/org/example/repository/user/UserRepository.java @@ -1,11 +1,9 @@ package org.example.repository.user; -import java.util.Optional; import java.util.UUID; import org.example.entity.User; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository, UserQuerydslRepository { - Optional findByNickname(String username); } diff --git a/app/domain/user-domain/src/main/java/org/example/usecase/UserUseCase.java b/app/domain/user-domain/src/main/java/org/example/usecase/UserUseCase.java index 8500f351..b9dafa1d 100644 --- a/app/domain/user-domain/src/main/java/org/example/usecase/UserUseCase.java +++ b/app/domain/user-domain/src/main/java/org/example/usecase/UserUseCase.java @@ -9,6 +9,10 @@ import org.example.entity.User; import org.example.error.UserError; import org.example.exception.BusinessException; +import org.example.repository.interest.InterestShowRepository; +import org.example.repository.subscription.artistsubscription.ArtistSubscriptionRepository; +import org.example.repository.subscription.genresubscription.GenreSubscriptionRepository; +import org.example.repository.ticketing.TicketingAlertRepository; import org.example.repository.user.SocialLoginRepository; import org.example.repository.user.UserRepository; import org.springframework.stereotype.Component; @@ -20,6 +24,10 @@ public class UserUseCase { private final UserRepository userRepository; private final SocialLoginRepository socialLoginRepository; + private final ArtistSubscriptionRepository artistSubscriptionRepository; + private final GenreSubscriptionRepository genreSubscriptionRepository; + private final InterestShowRepository interestShowRepository; + private final TicketingAlertRepository ticketingAlertRepository; @Transactional public User createNewUser(User user, SocialLogin socialLogin) { @@ -53,8 +61,8 @@ public User findUser(LoginDomainRequest request) { @Transactional public void deleteUser(UUID userId) { User user = userRepository.findById(userId).orElseThrow(NoSuchElementException::new); - - user.softDelete(); + userRepository.delete(user); + deleteAssociatedWith(user); } public UserProfileDomainResponse findUserProfile(UUID userId) { @@ -64,4 +72,12 @@ public UserProfileDomainResponse findUserProfile(UUID userId) { public String findUserFcmTokensByUserId(UUID userId) { return userRepository.findUserFcmTokensByUserId(userId).orElseThrow(NoSuchElementException::new); } + + private void deleteAssociatedWith(User user) { + socialLoginRepository.deleteAllByUserId(user.getId()); + artistSubscriptionRepository.deleteAllByUserId(user.getId()); + genreSubscriptionRepository.deleteAllByUserId(user.getId()); + interestShowRepository.deleteAllByUserId(user.getId()); + ticketingAlertRepository.deleteAllByUserId(user.getId()); + } }