woowacourse-teams / 2024-corea

코드리뷰 매칭 플랫폼, CoReA
https://code-review-area.com/
13 stars 7 forks source link

[BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) #575

Closed github-actions[bot] closed 1 week ago

github-actions[bot] commented 1 week ago

📌 관련 이슈

✨ PR 세부 내용

매칭 실패 원인을 프론트에 전달하는 기능을 구현했습니다. 구현 방식은 FailedMatching이라는 별도의 엔티티를 추가하여 매칭이 실패했을 때 관련 정보를 저장하고, 방을 조회할 때 실패 원인을 같이 전달하는 방식으로 구현하였습니다.

@Entity
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
public class FailedMatching {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private long roomId;

    @Enumerated(EnumType.STRING)
    private MatchingFailedReason reason;

    public FailedMatching(long roomId, ExceptionType exceptionType) {
        this(null, roomId, MatchingFailedReason.from(exceptionType));
    }

    public String getMatchingFailedReason() {
        return reason.getMessage();
    }
}

처음에 MatchResult 내부에서 상태를 가지도록 할까 고민했다가, 다들 알듯이 저희 MatchResult는 엄청 많이 생성되고 많이 아프잖아요,,. 그래서 여기에 추가 컬럼을 넣으면 성능 저하가 발생할 것을 우려되었습니다.

그래서 매칭이 실패한 경우에만 저장되는 FailedMatching 엔티티를 따로 구현하는 방식이 더 적합하다고 판단하고, 이렇게 하면 불필요한 데이터 저장을 최소화하면서도 매칭 실패 원인을 효과적으로 관리할 수 있다 생각됩니다.

아무리 생각해도 이 방법이 최선이고, 제일 좋은듯합니다. (혹여나 다른 의견 있다면 적극 환영입니다.) 😀

github-actions[bot] commented 1 week ago

Test Results

 49 files   49 suites   7s :stopwatch: 154 tests 148 :white_check_mark: 6 :zzz: 0 :x: 163 runs  157 :white_check_mark: 6 :zzz: 0 :x:

Results for commit 6181de9c.

:recycle: This comment has been updated with latest results.

jcoding-play commented 1 week ago

프론트에선 roomResponse 에서 메시지가 비었냐 아니냐로 오류 페이지를 판단하게 되는군요 고생 많았어요!!

그렇지 않고, 프론트에서 오류 페이지는 먼저 RoomStatus.FAIL 상태를 통해 먼저 판단합니다. message는 단순히 FAIL일 때 실패한 이유에 대해 전달하는 용도입니다~!