Skip to content

[User] 소프트 삭제 계정 스케줄러를 통한 하드 삭제, 복구 API 구현#75

Merged
Creamcheesepie merged 4 commits into
mainfrom
refactor/#67
Dec 15, 2025
Merged

[User] 소프트 삭제 계정 스케줄러를 통한 하드 삭제, 복구 API 구현#75
Creamcheesepie merged 4 commits into
mainfrom
refactor/#67

Conversation

@larama-C
Copy link
Copy Markdown
Collaborator

🔗 관련 이슈

관련된 이슈 번호를 연결해주세요.
Close #이슈번호 를 쓰면 PR merge 시 자동으로 close 됩니다.

🚀 PR 개요

이 PR이 어떤 변경을 포함하고 있는지 간단히 설명해주세요.

  • 회원 탈퇴 계정을 soft delete로 즉시 비활성화하고,
    일정 기간 경과 후 스케줄러를 통해 하드 삭제하도록 구현했습니다.
  • 유예 기간 내 계정 복구가 가능하도록 복구 API 및 이메일 기반 복구 링크(Magic Link) 기능을 추가했습니다.
  • 인증된 이메일 정보를 DB > Redis로 이관하고 30분의 TTL을 설정했습니다.

📌 변경 사항

주요 변경 내용을 체크리스트 형태로 정리해주세요.

  • 기능 추가
  • 버그 수정
  • 리팩터링
  • 문서 업데이트
  • 테스트 추가/수정

🧪 테스트 방법

변경된 내용을 어떻게 테스트했는지 구체적으로 적어주세요.

📸 스크린샷 (선택)

UI 변경 또는 시각적으로 확인할 수 있는 변경이 있다면 첨부해주세요.

⚠️ 참고 사항

리뷰어가 알아야 할 사항이 있다면 자유롭게 작성해주세요.

  • 복구 링크에 사용되는 프론트 URL은 프론트 도메인 확정 전까지 example.com 더미 URL을 사용하고 있습니다.
  • 실제 서비스 적용 시 환경 변수로 분리 예정입니다.
  • 하드 삭제는 스케줄러에서만 수행됩니다.

@larama-C larama-C self-assigned this Dec 15, 2025
@github-actions
Copy link
Copy Markdown

Test Results

1 tests  ±0   1 ✅ ±0   0s ⏱️ ±0s
1 suites ±0   0 💤 ±0 
1 files   ±0   0 ❌ ±0 

Results for commit 75bc748. ± Comparison against base commit 45379bf.

@github-actions
Copy link
Copy Markdown

⭐ JaCoCo Coverage

Line Coverage: 10.09%

📄 Coverage Details

Overall Line Coverage: 10.01% (92 covered / 919 lines)

Package Summary (lowest first)
Package Line % Covered Missed
com/back/web7_9_codecrete_be/domain/chats/controller 0.00% 0 0
com/back/web7_9_codecrete_be/domain/location/service 0.00% 0 25
com/back/web7_9_codecrete_be/domain/chats/service 0.00% 0 0
com/back/web7_9_codecrete_be/domain/plans/controller 0.00% 0 10
com/back/web7_9_codecrete_be/domain/location/controller 0.00% 0 4
com/back/web7_9_codecrete_be/global/rsData 0.00% 0 11
com/back/web7_9_codecrete_be/domain/location/entity 0.00% 0 0
com/back/web7_9_codecrete_be/global/scheduler 0.00% 0 3
com/back/web7_9_codecrete_be/domain/auth/entity 0.00% 0 0
com/back/web7_9_codecrete_be/domain/auth/service 0.00% 0 71
com/back/web7_9_codecrete_be/domain/plans/service 0.00% 0 80
com/back/web7_9_codecrete_be/global/initData 0.00% 0 26
com/back/web7_9_codecrete_be/domain/users/controller 0.00% 0 20
com/back/web7_9_codecrete_be/domain/email/entity 0.00% 0 6
com/back/web7_9_codecrete_be/domain/users/service 0.00% 0 59
com/back/web7_9_codecrete_be/domain/auth/controller 0.00% 0 20
com/back/web7_9_codecrete_be/domain/concerts/controller 0.00% 0 9
com/back/web7_9_codecrete_be/domain/artists/controller 0.00% 0 0
com/back/web7_9_codecrete_be/domain/artists/service 0.00% 0 0
com/back/web7_9_codecrete_be/global/aspect 0.00% 0 4
com/back/web7_9_codecrete_be/domain/email/service 1.92% 1 51
com/back/web7_9_codecrete_be/domain/concerts/service 5.48% 12 207
com/back/web7_9_codecrete_be/domain/concerts/entity 6.98% 3 40
com/back/web7_9_codecrete_be/global/rq 12.90% 4 27
com/back/web7_9_codecrete_be/domain/plans/entity 20.00% 11 44
com/back/web7_9_codecrete_be/domain/users/entity 22.86% 8 27
com/back/web7_9_codecrete_be/global/security 26.36% 29 81
com/back/web7_9_codecrete_be/global/storage 33.33% 1 2
com/back/web7_9_codecrete_be/domain/chats/entity 100.00% 1 0
com/back/web7_9_codecrete_be/global/doc 100.00% 17 0
com/back/web7_9_codecrete_be/domain/artists/entity 100.00% 5 0
Lowest Covered Classes (Top 20)
Class Line % Covered Missed
com.back.web7_9_codecrete_be.domain.plans.service.PlanService 0.00% 0 80
com.back.web7_9_codecrete_be.domain.users.service.UserService 0.00% 0 55
com.back.web7_9_codecrete_be.domain.auth.service.AuthService 0.00% 0 44
com.back.web7_9_codecrete_be.global.security.JwtTokenProvider 0.00% 0 37
com.back.web7_9_codecrete_be.domain.users.entity.User 0.00% 0 27
com.back.web7_9_codecrete_be.domain.auth.service.TokenService 0.00% 0 27
com.back.web7_9_codecrete_be.domain.concerts.entity.Concert 0.00% 0 26
com.back.web7_9_codecrete_be.global.initData.BaseInitData 0.00% 0 26
com.back.web7_9_codecrete_be.domain.users.controller.UserController 0.00% 0 20
com.back.web7_9_codecrete_be.domain.auth.controller.AuthController 0.00% 0 20
com.back.web7_9_codecrete_be.domain.plans.entity.Route 0.00% 0 18
com.back.web7_9_codecrete_be.domain.plans.entity.Plan 0.00% 0 16
com.back.web7_9_codecrete_be.domain.location.service.TmapService 0.00% 0 13
com.back.web7_9_codecrete_be.domain.location.service.KakaoLocalService 0.00% 0 12
com.back.web7_9_codecrete_be.domain.concerts.service.ConcertService 0.00% 0 11
com.back.web7_9_codecrete_be.global.rsData.RsData 0.00% 0 11
com.back.web7_9_codecrete_be.global.security.CustomUserDetail 0.00% 0 11
com.back.web7_9_codecrete_be.domain.plans.controller.PlanController 0.00% 0 10
com.back.web7_9_codecrete_be.domain.plans.entity.PlanParticipant 0.00% 0 10
com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertPlace 0.00% 0 9
Changed Classes (from this PR)
Source (PR) Class Prefix Line % Covered Missed
src/main/java/com/back/web7_9_codecrete_be/domain/users/service/UserService.java com.back.web7_9_codecrete_be.domain.users.service.UserService 0.00% 0 55
src/main/java/com/back/web7_9_codecrete_be/domain/users/controller/UserController.java com.back.web7_9_codecrete_be.domain.users.controller.UserController 0.00% 0 20
src/main/java/com/back/web7_9_codecrete_be/domain/users/service/UserCleanupService.java com.back.web7_9_codecrete_be.domain.users.service.UserCleanupService 0.00% 0 4
src/main/java/com/back/web7_9_codecrete_be/global/scheduler/UserCleanupScheduler.java com.back.web7_9_codecrete_be.global.scheduler.UserCleanupScheduler 0.00% 0 3
src/main/java/com/back/web7_9_codecrete_be/domain/email/repository/VerifiedEmailRedisRepository.java com.back.web7_9_codecrete_be.domain.email.repository.VerifiedEmailRedisRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/users/repository/UserRepository.java com.back.web7_9_codecrete_be.domain.users.repository.UserRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/users/repository/UserRestoreTokenRedisRepository.java com.back.web7_9_codecrete_be.domain.users.repository.UserRestoreTokenRedisRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/global/error/code/UserErrorCode.java com.back.web7_9_codecrete_be.global.error.code.UserErrorCode 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/email/service/EmailService.java com.back.web7_9_codecrete_be.domain.email.service.EmailService 1.92% 1 51
src/main/java/com/back/web7_9_codecrete_be/domain/users/entity/User.java com.back.web7_9_codecrete_be.domain.users.entity.User 12.90% 4 27

🔗 Full HTML report: See artifact jacoco-full-html on this run → https://github.com/prgrms-web-devcourse-final-project/WEB7_9_codecrete_BE/actions/runs/20224475948

Copy link
Copy Markdown
Collaborator

@Creamcheesepie Creamcheesepie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!

Copy link
Copy Markdown
Collaborator

@ys0221 ys0221 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!

@Creamcheesepie Creamcheesepie merged commit f25337a into main Dec 15, 2025
2 checks passed
@Creamcheesepie Creamcheesepie deleted the refactor/#67 branch December 15, 2025 08:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Auth] 인증 이메일 DB > Redis로 이관, 유저 탈퇴 스케줄러 구현

3 participants