diff --git a/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/user/controller/AuthController.java b/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/user/controller/AuthController.java index 8443b0ebf..663e26e40 100644 --- a/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/user/controller/AuthController.java +++ b/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/user/controller/AuthController.java @@ -64,9 +64,11 @@ public ResponseDto completeSignup( return ResponseDto.onSuccess(MemberConverter.toSignUpDoneDto(target)); } + @PreAuthorize("@memberSecurity.hasCompletedSignUp(#member.userId)") @Operation(summary = "토큰 재발급", description = "토큰 재발급") @PostMapping(value = "/reissuance") public ResponseDto reissueAccessToken( + @AuthenticationPrincipal SecurityUserDetails member, @RequestHeader(value = "refreshToken") String refreshToken ) { return ResponseDto.onSuccess(memberFacade.reissueAccessToken(refreshToken)); diff --git a/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/user/scheduler/MemberScheduler.java b/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/user/scheduler/MemberScheduler.java index 75e70c9d0..ffa17c593 100644 --- a/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/user/scheduler/MemberScheduler.java +++ b/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/user/scheduler/MemberScheduler.java @@ -25,7 +25,7 @@ public class MemberScheduler { @Scheduled(cron = "0 0 0 * * *") @Transactional public void removeInactiveUsersFromDB() { - List inactiveMembers = memberManageService.getInactiveMember(); + List inactiveMembers = memberManageService.getInactiveMembers(); for (Member member : inactiveMembers) { log.debug("[Delete] user name : " + member.getName()); // TODO : 관련 삭제 @@ -33,4 +33,14 @@ public void removeInactiveUsersFromDB() { } } + @Scheduled(cron = "0 0 * * * *") + @Transactional + public void removePendingUsersFromDB() { + List pendingMembers = memberManageService.getPendingMembers(); + for (Member member : pendingMembers) { + log.debug("[Delete PENDING] user name: {}", member.getName()); + memberManageService.removeMember(member); + } + } + } diff --git a/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/user/service/MemberManageService.java b/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/user/service/MemberManageService.java index 6459c300f..98243ca14 100644 --- a/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/user/service/MemberManageService.java +++ b/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/user/service/MemberManageService.java @@ -67,10 +67,14 @@ public Optional getMemberByEmailAndSocialType(String email, SocialType s return memberRepository.findMemberByEmailAndSocialType(email, socialType); } - public List getInactiveMember() { + public List getInactiveMembers() { return memberRepository.findMembersByStatusAndDate(MemberStatus.INACTIVE, LocalDateTime.now().minusDays(3)); } + public List getPendingMembers() { + return memberRepository.findMembersByStatusAndDate(MemberStatus.PENDING, LocalDateTime.now().minusHours(1)); + } + public Member saveMember(Member member) { return memberRepository.save(member); } diff --git a/application/external-api-v2/src/main/java/com/namo/spring/application/external/global/config/security/MemberSecurity.java b/application/external-api-v2/src/main/java/com/namo/spring/application/external/global/config/security/MemberSecurity.java new file mode 100644 index 000000000..8ea68e2c3 --- /dev/null +++ b/application/external-api-v2/src/main/java/com/namo/spring/application/external/global/config/security/MemberSecurity.java @@ -0,0 +1,26 @@ +package com.namo.spring.application.external.global.config.security; + +import org.springframework.stereotype.Component; +import org.springframework.security.core.userdetails.UsernameNotFoundException; + +import com.namo.spring.application.external.api.user.service.MemberManageService; +import com.namo.spring.db.mysql.domains.user.entity.Member; + +import lombok.RequiredArgsConstructor; + +@Component("memberSecurity") +@RequiredArgsConstructor +public class MemberSecurity { + + private final MemberManageService memberManageService; + + /** + * 주어진 userId에 해당하는 사용자가 회원가입을 완료했는지 검사합니다. + * @param userId SecurityUserDetails에서 가져온 사용자 ID + * @return 회원가입이 완료되어 있으면 true, 아니면 false + */ + public boolean hasCompletedSignUp(Long userId) { + Member member = memberManageService.getMember(userId); + return member.isSignUpComplete(); + } +} diff --git a/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/entity/Member.java b/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/entity/Member.java index 6d9c23131..dfa2b44dd 100644 --- a/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/entity/Member.java +++ b/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/entity/Member.java @@ -49,7 +49,6 @@ @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @DynamicInsert -@SQLDelete(sql = "UPDATE member SET deleted_at = NOW(), status = 'INACVTIVE' WHERE id = ?") public class Member extends BaseTimeEntity implements User { @Id