Skip to content

Commit 615423f

Browse files
committed
♻️refactor: 그룹이 삭제될 때 채팅방도 삭제[#182]
그룹이 영구 삭제될 때 해당 그룹과 연결된 채팅방도 함께 삭제되도록 합니다. 이를 통해 연결되지 않은 채팅방이 남는 것을 방지하고 데이터 일관성을 유지합니다. 그룹 채팅방을 찾을 수 없는 경우를 대비하여 GroupErrorCode를 추가합니다.
1 parent bd7ab06 commit 615423f

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

src/main/java/team/wego/wegobackend/group/domain/exception/GroupErrorCode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ public enum GroupErrorCode implements ErrorCode {
202202
ALREADY_REQUESTED_TO_JOIN(HttpStatus.BAD_REQUEST, "모임: 이미 가입 요청한 상태입니다. 모임 ID: %s 회원 ID: %s"),
203203
DUPLICATED_IMAGE_KEY_IN_REQUEST(HttpStatus.BAD_REQUEST, "모임: 이미지 키가 중복되었습니다."),
204204

205-
;
205+
GROUP_CHAT_ROOM_NOT_FOUND_BY_ID(HttpStatus.NOT_FOUND, "모임: 모임 채팅방을 찾을 수 없습니다. 모임 ID: %s");
206206

207207
private final HttpStatus status;
208208
private final String message;

src/main/java/team/wego/wegobackend/group/v2/application/service/GroupV2DeleteService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.springframework.transaction.annotation.Transactional;
99
import org.springframework.transaction.support.TransactionSynchronization;
1010
import org.springframework.transaction.support.TransactionSynchronizationManager;
11+
import team.wego.wegobackend.chat.domain.entity.ChatRoom;
12+
import team.wego.wegobackend.chat.domain.repository.ChatRoomRepository;
1113
import team.wego.wegobackend.group.domain.exception.GroupErrorCode;
1214
import team.wego.wegobackend.group.domain.exception.GroupException;
1315
import team.wego.wegobackend.group.v2.application.event.GroupDeletedEvent;
@@ -32,6 +34,8 @@ public class GroupV2DeleteService {
3234
private final ImageUploadService imageUploadService;
3335
private final ApplicationEventPublisher eventPublisher;
3436

37+
private final ChatRoomRepository chatRoomRepository;
38+
3539
@Transactional
3640
public void deleteHard(Long userId, Long groupId) {
3741
if (userId == null) {
@@ -60,7 +64,14 @@ public void deleteHard(Long userId, Long groupId) {
6064
// S3 삭제 대상 URL도 삭제 전에 확보
6165
List<String> variantUrls = groupImageV2Repository.findAllVariantUrlsByGroupId(groupId);
6266

67+
// chat room 확인
68+
ChatRoom chatRoom = chatRoomRepository.findByGroupId(groupId)
69+
.orElseThrow(
70+
() -> new GroupException(GroupErrorCode.GROUP_CHAT_ROOM_NOT_FOUND_BY_ID,
71+
groupId));
72+
6373
// DB 삭제
74+
chatRoomRepository.deleteById(chatRoom.getId());
6475
groupUserV2Repository.deleteByGroupId(groupId);
6576
groupTagV2Repository.deleteByGroupId(groupId);
6677
groupImageV2Repository.deleteVariantsByGroupId(groupId);

src/main/java/team/wego/wegobackend/group/v2/domain/entity/GroupV2.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@
1313
import jakarta.persistence.JoinColumn;
1414
import jakarta.persistence.ManyToOne;
1515
import jakarta.persistence.OneToMany;
16+
import jakarta.persistence.OneToOne;
1617
import jakarta.persistence.Table;
1718
import java.time.LocalDateTime;
1819
import java.util.ArrayList;
1920
import java.util.List;
2021
import lombok.AccessLevel;
2122
import lombok.Getter;
2223
import lombok.NoArgsConstructor;
24+
import team.wego.wegobackend.chat.domain.entity.ChatRoom;
2325
import team.wego.wegobackend.common.entity.BaseTimeEntity;
2426
import team.wego.wegobackend.group.domain.exception.GroupErrorCode;
2527
import team.wego.wegobackend.group.domain.exception.GroupException;
@@ -78,6 +80,9 @@ public class GroupV2 extends BaseTimeEntity {
7880
@OneToMany(mappedBy = "group", cascade = CascadeType.ALL, orphanRemoval = true)
7981
private List<GroupUserV2> users = new ArrayList<>();
8082

83+
@OneToOne(mappedBy = "group", cascade = CascadeType.ALL, orphanRemoval = true)
84+
private ChatRoom chatRoom;
85+
8186
public static GroupV2 create(
8287
String title,
8388
GroupV2Address address,

0 commit comments

Comments
 (0)