From 453aa2ed9f994be1f6d77918c714dc2ee812319a Mon Sep 17 00:00:00 2001 From: Kwak Seong Joon Date: Thu, 18 Jul 2024 21:08:14 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[feat]=20repository=20jpql=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20-=20#176?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dateroad/user/service/AuthService.java | 53 +++++++++++++++---- .../dateroad/user/service/UserService.java | 1 - .../date/repository/CourseRepository.java | 4 ++ .../repository/DateAccessRepository.java | 5 ++ .../like/repository/LikeRepository.java | 5 +- .../point/repository/PointRepository.java | 10 +++- .../tag/repository/UserTagRepository.java | 13 ++++- .../user/repository/UserRepository.java | 2 + 8 files changed, 79 insertions(+), 14 deletions(-) diff --git a/dateroad-api/src/main/java/org/dateroad/user/service/AuthService.java b/dateroad-api/src/main/java/org/dateroad/user/service/AuthService.java index 5fdce0af..091eda4b 100644 --- a/dateroad-api/src/main/java/org/dateroad/user/service/AuthService.java +++ b/dateroad-api/src/main/java/org/dateroad/user/service/AuthService.java @@ -6,15 +6,19 @@ import org.dateroad.auth.jwt.JwtProvider; import org.dateroad.auth.jwt.Token; import org.dateroad.code.FailureCode; +import org.dateroad.date.repository.CourseRepository; +import org.dateroad.date.service.DateRepository; +import org.dateroad.dateAccess.repository.DateAccessRepository; import org.dateroad.exception.*; import org.dateroad.feign.apple.AppleFeignProvider; import org.dateroad.feign.kakao.KakaoFeignProvider; import org.dateroad.exception.ConflictException; import org.dateroad.exception.EntityNotFoundException; import org.dateroad.exception.UnauthorizedException; +import org.dateroad.like.repository.LikeRepository; +import org.dateroad.point.repository.PointRepository; import org.dateroad.refreshtoken.domain.RefreshToken; import org.dateroad.refreshtoken.repository.RefreshTokenRepository; -import org.dateroad.s3.S3Service; import org.dateroad.tag.domain.DateTagType; import org.dateroad.tag.domain.UserTag; import org.dateroad.tag.repository.UserTagRepository; @@ -25,7 +29,6 @@ import org.dateroad.user.repository.UserRepository; import org.dateroad.user.dto.request.UserSignUpReq; import org.dateroad.user.dto.response.UserJwtInfoRes; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -47,6 +50,11 @@ public class AuthService { private final JwtProvider jwtProvider; private final RefreshTokenRepository refreshTokenRepository; private final UserService userService; + private final PointRepository pointRepository; + private final DateRepository dateRepository; + private final DateAccessRepository dateAccessRepository; + private final CourseRepository courseRepository; + private final LikeRepository likeRepository; @Transactional public UserJwtInfoRes signUp(final String token, final UserSignUpReq userSignUpReq, @Nullable final MultipartFile image, final List tag) { @@ -91,8 +99,7 @@ public void withdraw(final Long userId, final AppleWithdrawAuthCodeReq AppleWith throw new InvalidValueException(FailureCode.INVALID_PLATFORM_TYPE); } - deleteRefreshToken(foundUser.getId()); - userRepository.deleteById(foundUser.getId()); + deleteAllDataByUser(foundUser.getId()); } //닉네임 중복체크 @@ -167,13 +174,41 @@ private RefreshToken getRefreshTokenByToken(final String refreshToken) { } } - //refreshToken 삭제 - private void deleteRefreshToken(final long userId) { - refreshTokenRepository.deleteRefreshTokenByUserId(userId); - } - //토큰 발급 private Token issueToken(final Long userId) { return jwtProvider.issueToken(userId); } + + //리프레시 토큰 삭제 + private void deleteRefreshToken(final Long userId) { + refreshTokenRepository.deleteRefreshTokenByUserId(userId); + } + + //유저 탈퇴 시, 모든 유저 정보 삭제 + private void deleteAllDataByUser(final Long userId) { + + //유저태그 삭제 + userTagRepository.deleteAllByUserId(userId); + + //유저포인트 삭제 + pointRepository.deleteAllByUserId(userId); + + //유저데이트 삭제 + dateRepository.deleteAllByUserId(userId); + + //유저 date_access 삭제 + dateAccessRepository.deleteAllByUserId(userId); + + //유저 코스 삭제 + courseRepository.deleteAllByUserId(userId); + + //유저 좋아요 삭제 + likeRepository.deleteAllByUserId(userId); + + //리프레시토큰 삭제 + deleteRefreshToken(userId); + + //유저 삭제 + userRepository.deleteById(userId); + } } diff --git a/dateroad-api/src/main/java/org/dateroad/user/service/UserService.java b/dateroad-api/src/main/java/org/dateroad/user/service/UserService.java index 610d794c..5148019e 100644 --- a/dateroad-api/src/main/java/org/dateroad/user/service/UserService.java +++ b/dateroad-api/src/main/java/org/dateroad/user/service/UserService.java @@ -1,7 +1,6 @@ package org.dateroad.user.service; import io.micrometer.common.lang.Nullable; -import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dateroad.code.FailureCode; diff --git a/dateroad-domain/src/main/java/org/dateroad/date/repository/CourseRepository.java b/dateroad-domain/src/main/java/org/dateroad/date/repository/CourseRepository.java index 6e59b1ce..fd820d5a 100644 --- a/dateroad-domain/src/main/java/org/dateroad/date/repository/CourseRepository.java +++ b/dateroad-domain/src/main/java/org/dateroad/date/repository/CourseRepository.java @@ -25,4 +25,8 @@ public interface CourseRepository extends JpaRepository , JpaSpeci List findTopCoursesByLikes(Pageable pageable); @Query("SELECT c FROM Course c ORDER BY c.createdAt DESC") List findTopCoursesByCreatedAt(Pageable pageable); + + @Modifying + @Query("DELETE FROM UserTag ut WHERE ut.user.id = :userId") + void deleteAllByUserId(@Param("userId") Long userId); } diff --git a/dateroad-domain/src/main/java/org/dateroad/dateAccess/repository/DateAccessRepository.java b/dateroad-domain/src/main/java/org/dateroad/dateAccess/repository/DateAccessRepository.java index d1a4914e..86cf8ab4 100644 --- a/dateroad-domain/src/main/java/org/dateroad/dateAccess/repository/DateAccessRepository.java +++ b/dateroad-domain/src/main/java/org/dateroad/dateAccess/repository/DateAccessRepository.java @@ -3,6 +3,7 @@ import java.util.List; import org.dateroad.date.domain.Course; import org.dateroad.dateAccess.domain.DateAccess; +import org.dateroad.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -21,4 +22,8 @@ public interface DateAccessRepository extends JpaRepository { @Transactional @Query(value = "DELETE FROM date_access WHERE course_id = :courseId", nativeQuery = true) void deleteByCourse(@Param("courseId") Long courseId); + + @Modifying + @Query("DELETE FROM UserTag ut WHERE ut.user.id = :userId") + void deleteAllByUserId(@Param("userId") Long userId); } diff --git a/dateroad-domain/src/main/java/org/dateroad/like/repository/LikeRepository.java b/dateroad-domain/src/main/java/org/dateroad/like/repository/LikeRepository.java index 9cc1c3a0..840b2743 100644 --- a/dateroad-domain/src/main/java/org/dateroad/like/repository/LikeRepository.java +++ b/dateroad-domain/src/main/java/org/dateroad/like/repository/LikeRepository.java @@ -1,7 +1,6 @@ package org.dateroad.like.repository; import java.util.List; -import java.util.Map; import java.util.Optional; import org.dateroad.date.domain.Course; import org.dateroad.like.domain.Like; @@ -26,4 +25,8 @@ public interface LikeRepository extends JpaRepository { @Query("SELECT l.course, COUNT(l) FROM Like l WHERE l.course IN :courses GROUP BY l.course") List countByCourses(@Param("courses") List courses); + + @Modifying + @Query("DELETE FROM UserTag ut WHERE ut.user.id = :userId") + void deleteAllByUserId(@Param("userId") Long userId); } diff --git a/dateroad-domain/src/main/java/org/dateroad/point/repository/PointRepository.java b/dateroad-domain/src/main/java/org/dateroad/point/repository/PointRepository.java index 389dbcd6..a065ccdb 100644 --- a/dateroad-domain/src/main/java/org/dateroad/point/repository/PointRepository.java +++ b/dateroad-domain/src/main/java/org/dateroad/point/repository/PointRepository.java @@ -2,10 +2,18 @@ import java.util.List; import org.dateroad.point.domain.Point; +import org.dateroad.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository public interface PointRepository extends JpaRepository { - List findAllByUserIdOrderByCreatedAtDesc(Long userId); + List findAllByUserIdOrderByCreatedAtDesc(final Long userId); + + @Modifying + @Query("DELETE FROM UserTag ut WHERE ut.user.id = :userId") + void deleteAllByUserId(@Param("userId") Long userId); } diff --git a/dateroad-domain/src/main/java/org/dateroad/tag/repository/UserTagRepository.java b/dateroad-domain/src/main/java/org/dateroad/tag/repository/UserTagRepository.java index d6d61c6f..0c2bc7e0 100644 --- a/dateroad-domain/src/main/java/org/dateroad/tag/repository/UserTagRepository.java +++ b/dateroad-domain/src/main/java/org/dateroad/tag/repository/UserTagRepository.java @@ -1,11 +1,20 @@ package org.dateroad.tag.repository; import org.dateroad.tag.domain.UserTag; +import org.dateroad.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; import java.util.List; +@Repository public interface UserTagRepository extends JpaRepository { - List findAllByUserId(Long userId); - void deleteAllByUserId(Long userId); + List findAllByUserId(final Long userId); + + @Modifying + @Query("DELETE FROM UserTag ut WHERE ut.user.id = :userId") + void deleteAllByUserId(@Param("userId") final Long userId); } diff --git a/dateroad-domain/src/main/java/org/dateroad/user/repository/UserRepository.java b/dateroad-domain/src/main/java/org/dateroad/user/repository/UserRepository.java index 03875f20..3ea20dd4 100644 --- a/dateroad-domain/src/main/java/org/dateroad/user/repository/UserRepository.java +++ b/dateroad-domain/src/main/java/org/dateroad/user/repository/UserRepository.java @@ -3,9 +3,11 @@ import org.dateroad.user.domain.Platform; import org.dateroad.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; import java.util.Optional; +@Repository public interface UserRepository extends JpaRepository { boolean existsUserByPlatFormAndPlatformUserId(final Platform platform, final String platformUserId); From c2dfb56ccf5ffad04fdb24f3b2e5861362325414 Mon Sep 17 00:00:00 2001 From: Kwak Seong Joon Date: Thu, 18 Jul 2024 21:08:32 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[feat]=20=EC=9C=A0=EC=A0=80=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20-=20#176?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dateroad/date/service/DateRepository.java | 8 ++++++++ .../src/main/java/org/dateroad/user/domain/User.java | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/dateroad-api/src/main/java/org/dateroad/date/service/DateRepository.java b/dateroad-api/src/main/java/org/dateroad/date/service/DateRepository.java index 6526130d..687c1afe 100644 --- a/dateroad-api/src/main/java/org/dateroad/date/service/DateRepository.java +++ b/dateroad-api/src/main/java/org/dateroad/date/service/DateRepository.java @@ -1,9 +1,12 @@ package org.dateroad.date.service; import org.dateroad.date.domain.Date; +import org.dateroad.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; import java.time.LocalDate; import java.util.List; @@ -11,6 +14,7 @@ import java.time.LocalTime; import java.util.Optional; +@Repository public interface DateRepository extends JpaRepository { Optional findFirstByUserIdAndDateAfterOrDateAndStartAtAfterOrderByDateAscStartAtAsc( Long userId, LocalDate currentDate, LocalDate sameDay, LocalTime currentTime); @@ -21,6 +25,10 @@ Optional findFirstByUserIdAndDateAfterOrDateAndStartAtAfterOrderByDateAscS @Query("select d from Date d where d.user.id = :userId and d.date >= :currentDate order by d.date asc") List findFutureDatesByUserId(@Param("userId") Long userId, @Param("currentDate") LocalDate currentDate); + @Modifying + @Query("DELETE FROM UserTag ut WHERE ut.user.id = :userId") + void deleteAllByUserId(@Param("userId") Long userId); + } diff --git a/dateroad-domain/src/main/java/org/dateroad/user/domain/User.java b/dateroad-domain/src/main/java/org/dateroad/user/domain/User.java index ff63f57e..ff57789a 100644 --- a/dateroad-domain/src/main/java/org/dateroad/user/domain/User.java +++ b/dateroad-domain/src/main/java/org/dateroad/user/domain/User.java @@ -55,8 +55,8 @@ public class User extends BaseTimeEntity { @Setter private int totalPoint = 0; - @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) - private Set userTags; +// @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) +// private Set userTags; public static User create(final String name, final String platformUserId, final Platform platForm, final String imageUrl) { return User.builder() From 228049686aa4b1463f13386613cf93f1b0067e2d Mon Sep 17 00:00:00 2001 From: Kwak Seong Joon Date: Thu, 18 Jul 2024 21:15:04 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[chore]=20=EC=A3=BC=EC=84=9D=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20-=20#176?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/dateroad/user/domain/User.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/dateroad-domain/src/main/java/org/dateroad/user/domain/User.java b/dateroad-domain/src/main/java/org/dateroad/user/domain/User.java index ff57789a..7a34d589 100644 --- a/dateroad-domain/src/main/java/org/dateroad/user/domain/User.java +++ b/dateroad-domain/src/main/java/org/dateroad/user/domain/User.java @@ -55,9 +55,6 @@ public class User extends BaseTimeEntity { @Setter private int totalPoint = 0; -// @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) -// private Set userTags; - public static User create(final String name, final String platformUserId, final Platform platForm, final String imageUrl) { return User.builder() .name(name)