Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.grepp.spring.app.model.group.repository.GroupMemberCommandRepository;
import com.grepp.spring.app.model.group.repository.GroupMemberRepository;
import com.grepp.spring.app.model.member.entity.Member;
import com.grepp.spring.app.model.member.event.MemberWithdrawalEvent;
import com.grepp.spring.app.model.member.repository.MemberRepository;
import com.grepp.spring.app.model.schedule.code.ScheduleRole;
import com.grepp.spring.app.model.schedule.entity.Schedule;
Expand All @@ -38,6 +39,7 @@
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
Expand Down Expand Up @@ -432,6 +434,14 @@ private void findScheduleMembersOrThrow(ScheduleToGroupRequest request) {
}
}

// 회원 탈퇴 이벤트 리스너
@EventListener
@Transactional
public void handleMemberWithdrawal(MemberWithdrawalEvent event) {
Member member = event.getMember();
handleGroupWithdrawal(member);
}

// 회원 탈퇴 중 그룹 관련 처리 메서드
@Transactional
public void handleGroupWithdrawal(Member member) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.grepp.spring.app.model.member.event;

import com.grepp.spring.app.model.member.entity.Member;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;

@Getter
public class MemberWithdrawalEvent extends ApplicationEvent {

private final Member member;

public MemberWithdrawalEvent(Object source, Member member) {
super(source);
this.member = member;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.grepp.spring.app.controller.api.member.payload.ModifyMemberInfoResponse;
import com.grepp.spring.app.model.group.service.GroupCommandService;
import com.grepp.spring.app.model.member.entity.Member;
import com.grepp.spring.app.model.member.event.MemberWithdrawalEvent;
import com.grepp.spring.app.model.member.repository.MemberRepository;
import com.grepp.spring.app.model.schedule.service.ScheduleCommandService;
import com.grepp.spring.infra.error.exceptions.mypage.MemberNotFoundException;
Expand All @@ -14,6 +15,7 @@
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -25,8 +27,7 @@ public class MemberService {

private final MemberRepository memberRepository;
private final AuthService authService;
private final GroupCommandService groupCommandService;
private final ScheduleCommandService scheduleCommandService;
private final ApplicationEventPublisher eventPublisher;

public Optional<Member> findById(String userId) {
return memberRepository.findById(userId);
Expand Down Expand Up @@ -75,14 +76,14 @@ public ModifyMemberInfoResponse modifyProfileImage(String userId) {
public void withdraw(String userId, HttpServletResponse response, HttpServletRequest request) {
Member member = memberRepository.findById(userId)
.orElseThrow(() -> new MemberNotFoundException(MyPageErrorCode.MEMBER_NOT_FOUND));
// 1. 그룹 관련
groupCommandService.handleGroupWithdrawal(member);
// 2. 일정 관련
scheduleCommandService.handleScheduleWithdrawal(member);
// 3. 회원 탈퇴(삭제)

// 1. 회원 탈퇴 이벤트 발행
eventPublisher.publishEvent(new MemberWithdrawalEvent(this, member));

// 2. 회원 탈퇴(삭제)
memberRepository.delete(member);
log.info("회원 탈퇴가 완료되었습니다. 회원 ID: {}, 회원명: {}", member.getId(), member.getName());
// 4. 로그아웃 (토큰 무효화)
// 3. 로그아웃 (토큰 무효화)
authService.logout(request, response); // 다른 서비스 참조. 괜찮은가 ?
SecurityContextHolder.clearContext();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.grepp.spring.app.controller.api.schedule.payload.response.CreateSchedulesResponse;
import com.grepp.spring.app.model.event.entity.Event;
import com.grepp.spring.app.model.member.entity.Member;
import com.grepp.spring.app.model.member.event.MemberWithdrawalEvent;
import com.grepp.spring.app.model.member.repository.MemberRepository;
import com.grepp.spring.app.model.schedule.code.MeetingPlatform;
import com.grepp.spring.app.model.schedule.code.ScheduleRole;
Expand All @@ -29,6 +30,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.event.EventListener;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down Expand Up @@ -555,6 +557,14 @@ private Location saveSuggestedLocation(Schedule schedule, WriteSuggestedLocation
return location;
}

// 회원 탈퇴 이벤트 리스너
@EventListener
@Transactional
public void handleMemberWithdrawal(MemberWithdrawalEvent event) {
Member member = event.getMember();
handleScheduleWithdrawal(member);
}

// 회원 탈퇴 중 일정 관련 처리 메서드
@Transactional
public void handleScheduleWithdrawal(Member member) {
Expand Down
Loading