Skip to content

Commit

Permalink
Merge pull request #108 from Team-Sopetit/delete/#92-delete-member-api
Browse files Browse the repository at this point in the history
[DELETE] 회원 탈퇴
  • Loading branch information
Chan531 committed Jan 15, 2024
2 parents adfb68f + 9ed3c36 commit 2eddf1b
Show file tree
Hide file tree
Showing 17 changed files with 232 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,11 @@ public ResponseEntity<Response> signOut(Principal principal) {
authService.signOut(memberId);
return ResponseEntity.ok(success(SUCCESS_SIGN_OUT.getMessage(), null));
}

@DeleteMapping
public ResponseEntity<Response> withdrawal(Principal principal) {
val memberId = Long.parseLong(principal.getName());
authService.withdraw(memberId);
return ResponseEntity.ok(success(SUCCESS_WITHDRAWAL.getMessage()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public enum ResponseMessage {

SUCCESS_SIGN_IN("소셜로그인 성공"),
SUCCESS_SIGN_OUT("로그아웃 성공"),
SUCCESS_WITHDRAWAL("회원 탈퇴 성공"),
;

private final String message;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ public interface AuthService {

SignInResponse signIn(String socialAccessToken, SignInRequest request);
void signOut(Long memberId);
void withdraw(Long memberId);
}
47 changes: 47 additions & 0 deletions src/main/java/com/soptie/server/auth/service/AuthServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,20 @@
import com.soptie.server.member.entity.Member;
import com.soptie.server.member.entity.SocialType;
import com.soptie.server.member.repository.MemberRepository;
import com.soptie.server.memberDoll.entity.MemberDoll;
import com.soptie.server.memberDoll.service.MemberDollService;
import com.soptie.server.memberRoutine.service.CompletedMemberDailyRoutineService;
import com.soptie.server.memberRoutine.service.MemberDailyRoutineService;
import com.soptie.server.memberRoutine.service.MemberHappinessRoutineService;
import jakarta.persistence.EntityNotFoundException;
import lombok.RequiredArgsConstructor;
import lombok.val;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Objects;

import static com.soptie.server.auth.message.ErrorMessage.INVALID_TOKEN;
import static com.soptie.server.member.message.ErrorMessage.INVALID_MEMBER;

Expand All @@ -27,6 +34,10 @@ public class AuthServiceImpl implements AuthService {
private final JwtTokenProvider jwtTokenProvider;
private final MemberRepository memberRepository;
private final KakaoService kakaoService;
private final MemberDailyRoutineService memberDailyRoutineService;
private final MemberHappinessRoutineService memberHappinessRoutineService;
private final MemberDollService memberDollService;
private final CompletedMemberDailyRoutineService completedMemberDailyRoutineService;
private final ValueConfig valueConfig;

@Override
Expand All @@ -42,6 +53,17 @@ public void signOut(Long memberId) {
member.resetRefreshToken();
}

@Override
@Transactional
public void withdraw(Long memberId) {
val member = findMember(memberId);
deleteMemberDoll(member.getMemberDoll());
deleteMemberDailyRoutines(member);
deleteMemberHappinessRoutine(member);
deleteCompletedMemberDailyRoutines(member);
deleteMember(member);
}

private Member getMember(String socialAccessToken, SignInRequest request) {
val socialType = request.socialType();
val socialId = getSocialId(socialAccessToken, socialType);
Expand Down Expand Up @@ -85,4 +107,29 @@ private Member findMember(Long id) {
return memberRepository.findById(id)
.orElseThrow(() -> new EntityNotFoundException(INVALID_MEMBER.getMeesage()));
}

private void deleteMemberDoll(MemberDoll memberDoll) {
if (Objects.nonNull(memberDoll)) {
memberDollService.deleteMemberDoll(memberDoll);
}
}

private void deleteMemberDailyRoutines(Member member) {
member.getDailyRoutines()
.forEach(memberDailyRoutineService::deleteMemberDailyRoutine);
}

private void deleteMemberHappinessRoutine(Member member) {
if (Objects.nonNull(member.getHappinessRoutine())) {
memberHappinessRoutineService.deleteMemberHappinessRoutine(member.getHappinessRoutine());
}
}

private void deleteCompletedMemberDailyRoutines(Member member) {
completedMemberDailyRoutineService.deleteCompletedMemberDailyRoutines(member);
}

private void deleteMember(Member member) {
memberRepository.delete(member);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.soptie.server.memberDoll.repository;

import com.soptie.server.member.entity.Member;
import com.soptie.server.memberDoll.entity.MemberDoll;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MemberDollRepository extends JpaRepository<MemberDoll, Long> {
void deleteByMember(Member member);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import com.soptie.server.doll.entity.DollType;
import com.soptie.server.member.entity.Member;
import com.soptie.server.memberDoll.entity.MemberDoll;

public interface MemberDollService {

void createMemberDoll(Member member, DollType dollType, String name);
void deleteMemberDoll(MemberDoll memberDoll);
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@ public void createMemberDoll(Member member, DollType dollType, String name) {
memberDollRepository.save(memberDoll);
}

@Override
@Transactional
public void deleteMemberDoll(MemberDoll memberDoll) {
memberDollRepository.delete(memberDoll);
}

private Doll getDoll(DollType type) {
return dollRepository.findByDollType(type)
.orElseThrow(() -> new EntityNotFoundException(INVALID_TYPE.getMessage()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@

public interface CompletedMemberDailyRoutineRepository extends JpaRepository<CompletedMemberDailyRoutine, Long> {
Optional<CompletedMemberDailyRoutine> findByMemberAndRoutine(Member member, DailyRoutine routine);
void deleteAllByMember(Member member);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.soptie.server.memberRoutine.service;

import com.soptie.server.member.entity.Member;

public interface CompletedMemberDailyRoutineService {

void deleteCompletedMemberDailyRoutines(Member member);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.soptie.server.memberRoutine.service;

import com.soptie.server.member.entity.Member;
import com.soptie.server.memberRoutine.repository.CompletedMemberDailyRoutineRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class CompletedMemberDailyRoutineServiceImpl implements CompletedMemberDailyRoutineService {

private final CompletedMemberDailyRoutineRepository completedMemberDailyRoutineRepository;

@Override
@Transactional
public void deleteCompletedMemberDailyRoutines(Member member) {
completedMemberDailyRoutineRepository.deleteAllByMember(member);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.soptie.server.memberRoutine.dto.MemberDailyRoutineRequest;
import com.soptie.server.memberRoutine.dto.MemberDailyRoutineResponse;
import com.soptie.server.memberRoutine.dto.MemberDailyRoutinesResponse;
import com.soptie.server.memberRoutine.entity.daily.MemberDailyRoutine;

import java.util.List;

Expand All @@ -15,4 +16,5 @@ public interface MemberDailyRoutineService {
AchievedMemberDailyRoutineResponse achieveMemberDailyRoutine(long memberId, Long routineId);
MemberDailyRoutinesResponse getMemberDailyRoutines(long memberId);
void initMemberDailyRoutines();
void deleteMemberDailyRoutine(MemberDailyRoutine routine);
}
Original file line number Diff line number Diff line change
Expand Up @@ -148,4 +148,10 @@ public void initMemberDailyRoutines() {
val routines = memberDailyRoutineRepository.findAllByAchieved();
routines.forEach(MemberDailyRoutine::initAchievement);
}

@Override
@Transactional
public void deleteMemberDailyRoutine(MemberDailyRoutine routine) {
memberDailyRoutineRepository.delete(routine);
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.soptie.server.memberRoutine.service;

import com.soptie.server.memberRoutine.dto.*;
import com.soptie.server.memberRoutine.entity.happiness.MemberHappinessRoutine;

public interface MemberHappinessRoutineService {

MemberHappinessRoutineResponse createMemberHappinessRoutine(Long memberId, MemberHappinessRoutineRequest request);
MemberHappinessRoutinesResponse getMemberHappinessRoutine(Long memberId);
void deleteMemberHappinessRoutine(Long memberId, Long routineId);
void achieveMemberHappinessRoutine(Long memberId, Long routineId);
void deleteMemberHappinessRoutine(MemberHappinessRoutine routine);
}
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,10 @@ private void checkRoutineForMember(Member member, MemberHappinessRoutine routine
throw new IllegalStateException(INACCESSIBLE_ROUTINE.getMeesage());
}
}

@Override
@Transactional
public void deleteMemberHappinessRoutine(MemberHappinessRoutine routine) {
memberHappinessRoutineRepository.delete(routine);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.List;

import com.soptie.server.member.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import com.soptie.server.routine.entity.daily.DailyRoutine;
Expand Down
Loading

0 comments on commit 2eddf1b

Please sign in to comment.