Skip to content

Commit 2f4eea4

Browse files
committed
feat : 유저 삭제 시 가상친구, 대화방, 메시지 삭제 구현
1 parent dbb0a31 commit 2f4eea4

File tree

11 files changed

+58
-11
lines changed

11 files changed

+58
-11
lines changed

api/src/main/java/com/mbtips/domain/conversation/service/ConversationService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.mbtips.domain.converstation.Conversation;
55
import com.mbtips.domain.user.User;
66
import com.mbtips.domain.virtualfriend.VirtualFriend;
7+
import com.mbtips.message.interfaces.MessageRepository;
78
import lombok.RequiredArgsConstructor;
89
import lombok.extern.slf4j.Slf4j;
910
import org.springframework.stereotype.Service;

api/src/main/java/com/mbtips/domain/virtualfriend/VirtualFriendController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public ApiResponse<VirtualFriendResponse> createVirtualFriend(@Valid @RequestBod
4949
@DeleteMapping("/{friendId}")
5050
@Operation(summary = "가상친구 삭제", description = "가상친구가 삭제되며, 채팅방이 삭제됩니다.")
5151
public ApiResponse<Void> deleteVirtualFriend(@PathVariable Long friendId, @LoginUser User user){
52-
virtualFriendService.deleteVirtualFriend(friendId, user);
52+
virtualFriendService.deleteVirtualFriend(friendId);
5353
return ApiResponse.success();
5454
}
5555

api/src/main/java/com/mbtips/domain/virtualfriend/VirtualFriendService.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.mbtips.domain.virtualfriend.request.VirtualFriendRequest;
1010
import com.mbtips.domain.virtualfriend.response.VirtualFriendInfoResponse;
1111
import com.mbtips.domain.virtualfriend.response.VirtualFriendResponse;
12+
import com.mbtips.message.interfaces.MessageRepository;
1213
import com.mbtips.virtualfriend.entity.InterestEntity;
1314
import com.mbtips.virtualfriend.entity.VirtualFriendEntity;
1415
import com.mbtips.virtualfriend.interfaces.InterestRepository;
@@ -31,6 +32,7 @@ public class VirtualFriendService {
3132
private final ConversationService conversationService;
3233
private final InterestRepository interestRepository;
3334
private final ConversationRepository conversationRepository;
35+
private final MessageRepository messageRepository;
3436

3537
@Transactional(readOnly = true)
3638
public List<VirtualFriendResponse> getVirtualFriendsByUserId(User user) {
@@ -73,16 +75,27 @@ public VirtualFriendResponse createVirtualFriend(VirtualFriendRequest req, User
7375

7476

7577
@Transactional
76-
public void deleteVirtualFriend(Long virtualFriendId, User user) {
78+
public void deleteVirtualFriend(Long virtualFriendId) {
7779

7880
VirtualFriend virtualFriend = virtualFriendRepository.findById(virtualFriendId);
7981

8082
interestRepository.deleteInterestByVirtualFriend(virtualFriend);
83+
8184
conversationService.deleteConversation(virtualFriend);
8285
virtualFriendRepository.delete(virtualFriend);
8386

8487
}
8588

89+
public void deleteVirtualFriendByUserId(String userId){
90+
List<Long> virtualFriendIds = virtualFriendRepository.findVirtualFriendIds(userId);
91+
log.debug("가상친구 {} 명을 조회하였습니다.", virtualFriendIds.size());
92+
93+
for(long idx : virtualFriendIds){
94+
deleteVirtualFriend(idx);
95+
}
96+
log.debug("가상친구의 관심사, 대화방, 메시지를 모두 삭제하였습니다. 삭제된 가상친구 : {}", virtualFriendIds.size());
97+
}
98+
8699

87100
@Transactional(readOnly = true)
88101
public VirtualFriendInfoResponse findFriendInfoById(Long virtualFriendId) {

api/src/main/java/com/mbtips/user/application/manager/UserManager.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
import com.mbtips.common.exception.CustomException;
66
import com.mbtips.common.exception.enums.CommonException;
77
import com.mbtips.common.provider.JwtProvider;
8+
import com.mbtips.domain.conversation.service.ConversationService;
89
import com.mbtips.domain.user.User;
910
import com.mbtips.domain.user.utils.UserUtils;
11+
import com.mbtips.domain.virtualfriend.VirtualFriendService;
12+
import com.mbtips.message.application.service.MessageService;
1013
import com.mbtips.user.application.dto.LoginUserRequestDto;
1114
import com.mbtips.user.application.service.UserService;
1215
import lombok.RequiredArgsConstructor;
@@ -20,6 +23,9 @@ public class UserManager {
2023
private final UserService userService;
2124
private final ObjectMapper objectMapper;
2225
private final JwtProvider jwtProvider;
26+
private final VirtualFriendService virtualFriendService;
27+
private final ConversationService conversationService;
28+
private final MessageService messageService;
2329

2430
@Transactional
2531
public String login(LoginUserRequestDto requestDto) {
@@ -34,7 +40,7 @@ public String login(LoginUserRequestDto requestDto) {
3440

3541
@Transactional
3642
public void deleteUser(String userId) {
43+
virtualFriendService.deleteVirtualFriendByUserId(userId);
3744
userService.delete(userId);
38-
// TODO : 회원 탈퇴시 진행되어야 하는 구조를 여기 넣으면 됩니다.
3945
}
4046
}

repository/src/main/java/com/mbtips/conversation/repository/impl/ConversationRepositoryImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.mbtips.domain.converstation.Conversation;
88
import com.mbtips.domain.converstation.exception.ConversationException;
99
import com.mbtips.domain.virtualfriend.VirtualFriend;
10+
import com.mbtips.message.repository.jpa.MessageJpaRepository;
1011
import com.mbtips.virtualfriend.entity.VirtualFriendEntity;
1112
import lombok.RequiredArgsConstructor;
1213
import org.springframework.stereotype.Repository;
@@ -20,6 +21,7 @@
2021
public class ConversationRepositoryImpl implements ConversationRepository {
2122

2223
private final ConversationJpaRepository conversationJpaRepository;
24+
private final MessageJpaRepository messageJpaRepository;
2325

2426

2527
@Override
@@ -34,6 +36,7 @@ public Conversation save(Conversation conversation) {
3436
@Transactional
3537
public void delete(Conversation conversation) {
3638
ConversationEntity conversationEntity = new ConversationEntity(conversation);
39+
messageJpaRepository.deleteAllByConversationEntity(conversationEntity);
3740
conversationJpaRepository.delete(conversationEntity);
3841
}
3942

repository/src/main/java/com/mbtips/message/interfaces/MessageRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.mbtips.domain.message.Message;
44
import com.mbtips.domain.message.dto.response.GetMessageResponseDto;
5+
import com.mbtips.domain.virtualfriend.VirtualFriend;
56

67
import java.util.List;
78

@@ -12,4 +13,5 @@ public interface MessageRepository {
1213
void createMessage(Message message);
1314

1415
List<GetMessageResponseDto> findRecentMessagesByConversationId(Long conversationId);
16+
1517
}

repository/src/main/java/com/mbtips/message/repository/impl/MessageRepositoryImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.mbtips.domain.message.Message;
44
import com.mbtips.domain.message.dto.response.GetMessageResponseDto;
5+
import com.mbtips.domain.virtualfriend.VirtualFriend;
56
import com.mbtips.message.entity.MessageEntity;
67
import com.mbtips.message.interfaces.MessageRepository;
78
import com.mbtips.message.repository.jpa.MessageJpaRepository;
@@ -52,4 +53,5 @@ public List<GetMessageResponseDto> findRecentMessagesByConversationId(Long conve
5253
}
5354

5455

56+
5557
}
Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.mbtips.message.repository.jpa;
22

33

4+
import com.mbtips.conversation.entity.ConversationEntity;
45
import com.mbtips.domain.message.dto.response.GetMessageResponseDto;
6+
import com.mbtips.domain.virtualfriend.VirtualFriend;
57
import com.mbtips.message.entity.MessageEntity;
68
import org.springframework.data.domain.PageRequest;
79
import org.springframework.data.jpa.repository.JpaRepository;
@@ -13,21 +15,24 @@
1315
@Repository
1416
public interface MessageJpaRepository extends JpaRepository<MessageEntity, Long> {
1517

16-
@Query("select new com.mbtips.domain.message.dto.response.GetMessageResponseDto(" +
17-
"m.messageId, " +
18-
"m.messageContent, " +
19-
"m.sentAt, " +
20-
"m.user.userId, " +
21-
"m.virtualFriendEntity.virtualFriendId) " +
18+
@Query("select new com.mbtips.domain.message.dto.response.GetMessageResponseDto( " +
19+
"m.messageId , " +
20+
"m.messageContent , " +
21+
"m.sentAt , " +
22+
"m.user.userId , " +
23+
"m.virtualFriendEntity.virtualFriendId ) " +
2224
"from MessageEntity m " +
2325
"where m.conversationEntity.conversationId = :conversationId " +
24-
"ORDER BY m.sentAt asc")
26+
"ORDER BY m.sentAt asc ")
2527
List<GetMessageResponseDto> findByConversationId(Long conversationId);
2628

27-
@Query("SELECT new com.mbtips.domain.message.dto.response.GetMessageResponseDto(" +
29+
@Query("SELECT new com.mbtips.domain.message.dto.response.GetMessageResponseDto( " +
2830
"m.messageId, m.messageContent, m.sentAt, m.user.userId, m.virtualFriendEntity.virtualFriendId) " +
2931
"FROM MessageEntity m " +
3032
"WHERE m.conversationEntity.conversationId = :conversationId " +
3133
"ORDER BY m.sentAt DESC")
3234
List<GetMessageResponseDto> findRecentMessagesByConversationId(Long conversationId, PageRequest of);
35+
36+
37+
void deleteAllByConversationEntity(ConversationEntity conversationEntity);
3338
}

repository/src/main/java/com/mbtips/virtualfriend/interfaces/VirtualFriendRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ public interface VirtualFriendRepository {
1515
List<Object[]> findVirtualFriendAndConversation(String userId);
1616

1717
VirtualFriend update(Long virtualFriendId, VirtualFriend virtualFriend);
18+
19+
List<Long> findVirtualFriendIds(String userId);
1820
}

repository/src/main/java/com/mbtips/virtualfriend/repository/impl/VirtualFriendRepositoryImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88
import com.mbtips.virtualfriend.interfaces.VirtualFriendRepository;
99
import com.mbtips.virtualfriend.repository.jpa.VirtualFriendJpaRepository;
1010
import lombok.RequiredArgsConstructor;
11+
import lombok.extern.slf4j.Slf4j;
1112
import org.springframework.stereotype.Repository;
1213

1314
import java.util.List;
1415

1516
@Repository
1617
@RequiredArgsConstructor
18+
@Slf4j
1719
public class VirtualFriendRepositoryImpl implements VirtualFriendRepository {
1820

1921
private final VirtualFriendJpaRepository virtualFriendJpaRepository;
@@ -59,5 +61,12 @@ public VirtualFriend update(Long virtualFriendId, VirtualFriend virtualFriend) {
5961
return updateEntity.toDomain();
6062
}
6163

64+
@Override
65+
public List<Long> findVirtualFriendIds(String userId) {
66+
List<Long> result = virtualFriendJpaRepository.findIdsByUserId(userId);
67+
68+
return result;
69+
}
70+
6271

6372
}

0 commit comments

Comments
 (0)