From d82c3d717bbb84a716987b16cbb41aa15864ff4c Mon Sep 17 00:00:00 2001 From: mashin2002 Date: Fri, 13 Dec 2024 11:00:31 +0900 Subject: [PATCH] refactor: added s3 logic in withdraw --- .../limjang/LimjangPriceRepository.java | 17 ++++++++ .../repository/record/RecordRepository.java | 2 + .../juinjang/service/auth/OAuthService.java | 42 +++++++++++++++++-- 3 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 src/main/java/umc/th/juinjang/repository/limjang/LimjangPriceRepository.java diff --git a/src/main/java/umc/th/juinjang/repository/limjang/LimjangPriceRepository.java b/src/main/java/umc/th/juinjang/repository/limjang/LimjangPriceRepository.java new file mode 100644 index 00000000..c4ef9b73 --- /dev/null +++ b/src/main/java/umc/th/juinjang/repository/limjang/LimjangPriceRepository.java @@ -0,0 +1,17 @@ +package umc.th.juinjang.repository.limjang; + +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.transaction.annotation.Transactional; +import umc.th.juinjang.model.entity.Limjang; +import umc.th.juinjang.model.entity.LimjangPrice; + +public interface LimjangPriceRepository extends JpaRepository { + + @Transactional + @Modifying + void deleteAllByLimjang(Limjang limjang); + +} diff --git a/src/main/java/umc/th/juinjang/repository/record/RecordRepository.java b/src/main/java/umc/th/juinjang/repository/record/RecordRepository.java index 087cc678..da4ad324 100644 --- a/src/main/java/umc/th/juinjang/repository/record/RecordRepository.java +++ b/src/main/java/umc/th/juinjang/repository/record/RecordRepository.java @@ -6,6 +6,7 @@ import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; +import umc.th.juinjang.model.entity.Image; import umc.th.juinjang.model.entity.Limjang; import umc.th.juinjang.model.entity.Record; @@ -23,4 +24,5 @@ public interface RecordRepository extends JpaRepository { @Modifying @Query(value = "DELETE FROM record r WHERE r.limjang_id = :limjangId", nativeQuery = true) void deleteByLimjangId(@Param("limjangId") Long limjangId); + } diff --git a/src/main/java/umc/th/juinjang/service/auth/OAuthService.java b/src/main/java/umc/th/juinjang/service/auth/OAuthService.java index cc808ab6..8936feec 100644 --- a/src/main/java/umc/th/juinjang/service/auth/OAuthService.java +++ b/src/main/java/umc/th/juinjang/service/auth/OAuthService.java @@ -8,7 +8,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; import umc.th.juinjang.apiPayload.ExceptionHandler; -import umc.th.juinjang.apiPayload.code.status.SuccessStatus; import umc.th.juinjang.apiPayload.exception.handler.MemberHandler; import umc.th.juinjang.controller.KakaoUnlinkClient; import umc.th.juinjang.external.discord.DiscordAlertProvider; @@ -17,27 +16,34 @@ import umc.th.juinjang.model.dto.auth.apple.*; import umc.th.juinjang.model.dto.auth.kakao.KakaoLoginRequestDto; import umc.th.juinjang.model.dto.auth.kakao.KakaoSignUpRequestDto; +import umc.th.juinjang.model.entity.Image; import umc.th.juinjang.model.entity.Limjang; import umc.th.juinjang.model.entity.Member; +import umc.th.juinjang.model.entity.Record; import umc.th.juinjang.model.entity.enums.MemberProvider; import umc.th.juinjang.repository.checklist.ChecklistAnswerRepository; import umc.th.juinjang.repository.checklist.ReportRepository; import umc.th.juinjang.repository.image.ImageRepository; +import umc.th.juinjang.repository.limjang.LimjangPriceRepository; import umc.th.juinjang.repository.limjang.LimjangRepository; import umc.th.juinjang.repository.limjang.MemberRepository; import umc.th.juinjang.repository.limjang.ScrapRepository; import umc.th.juinjang.repository.record.RecordRepository; import umc.th.juinjang.service.JwtService; +import umc.th.juinjang.service.S3Service; import java.time.LocalDateTime; +import java.util.Collections; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import static umc.th.juinjang.apiPayload.code.status.ErrorStatus.*; @Slf4j @Service @RequiredArgsConstructor +@Transactional public class OAuthService { private final MemberRepository memberRepository; @@ -51,6 +57,8 @@ public class OAuthService { private final RecordRepository recordRepository; private final ImageRepository imageRepository; private final ReportRepository reportRepository; + private final S3Service s3Service; + private final LimjangPriceRepository limjangPriceRepository; @Autowired private KakaoUnlinkClient kakaoUnlinkClient; @@ -331,16 +339,33 @@ public void appleWithdraw(Member member, String code) { deleteMemberData(member); } - - private void deleteAllByLimjangId(Limjang limjang) { + @Transactional + public void deleteAllByLimjangId(Limjang limjang) { scrapRepository.deleteByLimjangId(limjang.getLimjangId()); checklistAnswerRepository.deleteByLimjangId(limjang.getLimjangId()); + limjangPriceRepository.deleteAllByLimjang(limjang); + List imageList = limjang.getImageList() + .stream() + .map(Image::getImageUrl) + .collect(Collectors.toList()); + List recordList = limjang.getRecordList() + .stream() + .map(Record::getRecordUrl) + .collect(Collectors.toList()); + + + deleteFromS3(imageList); + deleteFromS3(recordList); + imageRepository.deleteByLimjangId(limjang.getLimjangId()); recordRepository.deleteByLimjangId(limjang.getLimjangId()); reportRepository.deleteByLimjangId(limjang.getLimjangId()); + } - private void deleteMemberData(Member member) { + + @Transactional + public void deleteMemberData(Member member) { List limjangList = limjangRepository.findLimjangByMemberIdIgnoreDeleted(member.getMemberId()); for (Limjang limjang : limjangList) { @@ -349,6 +374,15 @@ private void deleteMemberData(Member member) { limjangRepository.deleteAllByMemberId(member.getMemberId()); memberRepository.deleteById(member.getMemberId()); + deleteFromS3(Collections.singletonList(member.getImageUrl())); + } + + @Transactional + public void deleteFromS3(List urlList){ + for (String url : urlList) { + s3Service.deleteFile(url); + } } + }