Skip to content

Commit

Permalink
feat: 회원 탈퇴 (DB 전부 삭제) 기능 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
Walkers15 committed Mar 26, 2024
1 parent 5af8ca2 commit c97619f
Show file tree
Hide file tree
Showing 6 changed files with 135 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.dnd.bbok.member.adapter.in.web;

import com.dnd.bbok.global.response.MessageResponse;
import com.dnd.bbok.member.application.port.in.response.SessionUser;
import com.dnd.bbok.member.application.port.in.usecase.DeleteMemberUseCase;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/api/v1")
@Api(tags = "멤버 관련 컨트롤러")
@RequiredArgsConstructor
public class DeleteMemberController {
private final DeleteMemberUseCase deleteMemberUseCase;

@ApiOperation(value = "회원 탈퇴")
@DeleteMapping("/member")
@PreAuthorize("isAuthenticated()")
public ResponseEntity<MessageResponse> getChecklist(
@AuthenticationPrincipal SessionUser sessionUser
) {
log.info(String.valueOf(sessionUser.getUuid()));
String result = deleteMemberUseCase.deleteMember(sessionUser.getUuid());
return new ResponseEntity<>(
MessageResponse.of(HttpStatus.CREATED, result), HttpStatus.CREATED);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.dnd.bbok.member.adapter.out.persistence;

import com.dnd.bbok.diary.adapter.out.persistence.entity.DiaryChecklistEntity;
import com.dnd.bbok.diary.adapter.out.persistence.entity.DiaryEntity;
import com.dnd.bbok.diary.adapter.out.persistence.entity.DiaryTagEntity;
import com.dnd.bbok.diary.adapter.out.persistence.repository.DiaryChecklistRepository;
import com.dnd.bbok.diary.adapter.out.persistence.repository.DiaryRepository;
import com.dnd.bbok.diary.adapter.out.persistence.repository.DiaryTagRepository;
import com.dnd.bbok.friend.adapter.out.persistence.entity.FriendEntity;
import com.dnd.bbok.friend.adapter.out.persistence.entity.FriendTagEntity;
import com.dnd.bbok.friend.adapter.out.persistence.repository.FriendRepository;
import com.dnd.bbok.friend.adapter.out.persistence.repository.FriendTagRepository;
import com.dnd.bbok.member.adapter.out.persistence.entity.MemberChecklistEntity;
import com.dnd.bbok.member.adapter.out.persistence.repository.MemberChecklistRepository;
import com.dnd.bbok.member.adapter.out.persistence.repository.MemberRepository;
import com.dnd.bbok.member.application.port.out.DeleteMemberPort;
import com.dnd.bbok.saying.adapter.out.persistence.repository.BookmarkRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;

@Repository
@RequiredArgsConstructor
public class MemberDeleteAdapter implements DeleteMemberPort {

private final MemberRepository memberRepository;
private final MemberChecklistRepository memberChecklistRepository;
private final FriendTagRepository friendTagRepository;
private final FriendRepository friendRepository;
private final DiaryRepository diaryRepository;
private final DiaryTagRepository diaryTagRepository;
private final DiaryChecklistRepository diaryChecklistRepository;
private final BookmarkRepository bookmarkRepository;

@Override
public void deleteMember(UUID memberId) {
// 지워야 할 거
// 1. bookmark
// 2. diary_tag
// 3. diary_checklist
// 4. diary
// 5. friend_tag
// 6. friend
// 7. member_checklist
// 8. member
bookmarkRepository.deleteByMemberId(memberId);

List<FriendEntity> friends = friendRepository.findAllFriends(memberId);
for (FriendEntity friend : friends) {
List<FriendTagEntity> friendTags = friendTagRepository.findAllByFriendId(friend.getId());
List<DiaryEntity> diaries = diaryRepository.findAllByFriendId(friend.getId());
List<DiaryTagEntity> diaryTags = diaryTagRepository.findByDiaryIds(diaries.stream().map(DiaryEntity::getId).collect(Collectors.toList()));
List<DiaryChecklistEntity> diaryChecklist = diaryChecklistRepository.getDiaryChecklistByDiaryIds(diaries.stream().map(DiaryEntity::getId).collect(Collectors.toList()));
diaryTagRepository.deleteAll(diaryTags);
diaryChecklistRepository.deleteAll(diaryChecklist);
diaryRepository.deleteAll(diaries);
friendTagRepository.deleteAll(friendTags);
}
friendRepository.deleteAll(friends);
List<MemberChecklistEntity> memberChecklist = memberChecklistRepository.findByMemberId(memberId);
memberChecklistRepository.deleteAll(memberChecklist);

memberRepository.deleteById(memberId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.dnd.bbok.member.application.port.in.usecase;

import java.util.UUID;

public interface DeleteMemberUseCase {
String deleteMember(UUID string);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.dnd.bbok.member.application.port.out;

import java.util.UUID;

public interface DeleteMemberPort {
void deleteMember(UUID string);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,9 @@
import com.dnd.bbok.member.application.port.in.response.GetMemberChecklistResponse;
import com.dnd.bbok.member.application.port.in.response.GetMemberInfoResponse;

import com.dnd.bbok.member.application.port.in.usecase.CreateMemberChecklistUseCase;
import com.dnd.bbok.member.application.port.in.usecase.EditMemberChecklistUseCase;
import com.dnd.bbok.member.application.port.in.usecase.GetMemberChecklistQuery;
import com.dnd.bbok.member.application.port.in.usecase.GetMemberQuery;
import com.dnd.bbok.member.application.port.in.usecase.*;

import com.dnd.bbok.member.application.port.out.DeleteMemberPort;
import com.dnd.bbok.member.application.port.out.LoadMemberChecklistPort;
import com.dnd.bbok.member.application.port.out.LoadMemberPort;
import com.dnd.bbok.member.application.port.out.SaveMemberChecklistPort;
Expand All @@ -37,11 +35,12 @@
@Slf4j
public class MemberService implements
GetMemberQuery, CreateMemberChecklistUseCase, GetMemberChecklistQuery,
EditMemberChecklistUseCase {
EditMemberChecklistUseCase, DeleteMemberUseCase {

private final LoadMemberPort loadMemberPort;
private final LoadMemberChecklistPort loadMemberChecklistPort;
private final SaveMemberChecklistPort saveMemberChecklistPort;
private final DeleteMemberPort deleteMemberPort;

@Override
public GetMemberInfoResponse getMember(UUID memberId) {
Expand Down Expand Up @@ -124,4 +123,12 @@ public void edit(UUID memberId, EditMemberChecklistRequest memberChecklistReques

saveMemberChecklistPort.saveMemberChecklistWithCond(memberId, updateChecklist);
}


@Override
public String deleteMember(UUID memberId) {
// TODO Transaction
deleteMemberPort.deleteMember(memberId);
return "success";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

import java.util.Optional;
import java.util.UUID;

import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

Expand All @@ -17,4 +19,8 @@ Optional<BookmarkEntity> findBookmark(

@Query("select b from BookmarkEntity b where b.member.id = :memberId")
List<BookmarkEntity> findMemberBookmark(@Param("memberId") UUID memberId);

@Modifying
@Query("delete from BookmarkEntity b where b.member.id = :memberId")
void deleteByMemberId(@Param("memberId") UUID memberId);
}

0 comments on commit c97619f

Please sign in to comment.