Skip to content

Commit

Permalink
[MS-170] (Error) Feat: 회원탈퇴 방 정보 Hard Delete 처리 3
Browse files Browse the repository at this point in the history
Room은 Soft Delete라서 Member 삭제 시 에러 발생
  • Loading branch information
YooJisu826 committed Aug 5, 2024
1 parent a8eae48 commit 09e0427
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,16 @@

import com.modutaxi.api.domain.member.entity.Member;
import com.modutaxi.api.domain.member.entity.Role;
import jakarta.persistence.LockModeType;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {

Optional<Member> findByIdAndStatusTrue(@Param("memberId") Long memberId);

Optional<Member> findBySnsIdAndStatusTrue(String snsId);
Expand Down Expand Up @@ -46,4 +44,7 @@ Optional<Member> findCertificatedMember(@Param("userId") Long userId,
Optional<Member> findByAppleSnsIdAndStatusTrue(@Param("snsId") String snsId);

Optional<Member> findByPhoneNumber(String phoneNumber);

@Query("SELECT m.id FROM Member m ORDER BY m.id DESC")
Long getIdByIdOrderByIdDesc();
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.modutaxi.api.domain.member.service;

import static com.modutaxi.api.common.constants.ServerConstants.BASIC_PROFILE_IMAGE_URL;

import com.modutaxi.api.common.exception.BaseException;
import com.modutaxi.api.common.exception.errorcode.MemberErrorCode;
import com.modutaxi.api.domain.member.dto.MemberResponseDto.MemberProfileResponse;
Expand All @@ -20,13 +22,17 @@ public List<Member> getMemberList(List<Long> memberIdList) {
}

public MemberProfileResponse getMemberProfile(Long id) {
Member member = memberRepository.findByIdAndStatusTrue(id)
.orElseThrow(() -> new BaseException(MemberErrorCode.EMPTY_MEMBER));
return MemberMapper.toDto2(member);
Member member = memberRepository.findByIdAndStatusTrue(id).orElse(null);
if (member == null) {
return new MemberProfileResponse(0L, "(알수없음)", 0, false, BASIC_PROFILE_IMAGE_URL);
} else {
return MemberMapper.toDto2(member);
}
}

public Member getMemberByAppleSnsId(String snsId) {
return memberRepository.findByAppleSnsIdAndStatusTrue(snsId)
.orElseThrow(() -> new BaseException(MemberErrorCode.EMPTY_MEMBER));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,12 @@
import java.util.Objects;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Log4j2
@Transactional
@RequiredArgsConstructor
public class UpdateMemberService {
Expand Down Expand Up @@ -159,34 +161,44 @@ public void deleteMember(Member member) {
/**
* 멤버의 방 맵핑 삭제
*/
private void deleteRoomMapping(Member member) {
public void deleteRoomMapping(Member member) {
// 모든 대기열 삭제
roomWaitingRepository.deleteByMember(member);

log.info("대기열 탈퇴 성공!");
// 내가 방장인 방이 있다면, 방 삭제
if (roomRepository.existsRoomByRoomManager(member)) {
log.info("내가 방장인 방이 있나요? 결과: {}", roomRepository.existsRoomByRoomManager(member));
Long roomId = roomRepository.findIdByRoomManagerAndRoomStatusIsNotDelete(
member); // 내가 이용 중인 방 ID
log.info("내 방의 ID는? 결과: {}", roomId);
updateRoomService.deleteRoom(member, roomId);
roomRepository.updateMemberId(roomId, 0L);
log.info("방 삭제 성공!");
}
// 내가 방장이 아니고 이용 중인 방이 있다면, 방 퇴장
else if (participantRepository.existsByMember(member)) {
log.info("내가 이용 중인 방이 있나요? 결과: {}", participantRepository.existsByMember(member));
updateParticipantService.leaveRoomAndDeleteChatRoomInfo(member.getId());
log.info("방 퇴장 성공!");
}
}

/**
* 멤버의 정보와 관련된 것들 삭제
*/
private void deleteMemberInfo(Member member) {
public void deleteMemberInfo(Member member) {
// PaymentMember hard delete
updatePaymentMemberService.deleteByMember(member);
log.info("정산 정보 삭제 성공!");
// 이용 내역 hard delete
historyRepository.deleteByMember(member);
log.info("이용 내역 삭제 성공!");
// 계좌 정보 hard delete
accountRepository.deleteByMember(member);
log.info("계좌 삭제 성공!");
// 알림 hard delete
alarmRepository.deleteByMemberId(member.getId());
log.info("알림 삭제 성공!");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import com.modutaxi.api.domain.member.entity.Member;
import com.modutaxi.api.domain.room.entity.Room;
import io.lettuce.core.dynamic.annotation.Param;
import jakarta.persistence.LockModeType;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

public interface RoomRepository extends JpaRepository<Room, Long> {
Expand All @@ -25,4 +27,8 @@ public interface RoomRepository extends JpaRepository<Room, Long> {
@Lock(value = LockModeType.PESSIMISTIC_WRITE)
@Query(value = "SELECT r FROM Room r WHERE r.id =:id AND r.roomStatus < 4")
Optional<Room> findActiveRoomByIdForUpdate(Long id);

@Modifying
@Query(value = "UPDATE Room r SET r.roomManager =: memberId WHERE r.id = :roomId")
void updateMemberId(@Param("roomId") Long roomId, @Param("memberId") Long memberId);
}

0 comments on commit 09e0427

Please sign in to comment.