Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bug] 멘토링 예약 시 409 에러가 두 번 캐치됨 #241

Closed
jinaji opened this issue Oct 6, 2023 · 1 comment
Closed

[bug] 멘토링 예약 시 409 에러가 두 번 캐치됨 #241

jinaji opened this issue Oct 6, 2023 · 1 comment
Labels
bug Something isn't working

Comments

@jinaji
Copy link
Contributor

jinaji commented Oct 6, 2023

버그 설명
이미 예약 과정중에 있는 멘토에게 다시 예약을 했을 때 409 에러 캐치가 두 번 일어납니다
42manito/src/components/Mentor/Modal.tsx

const handleYes = async () => {
    if (!userId) {
      alert("로그인이 필요합니다.");
      return;
    }
    if (connectState.categoryId === 0) {
      alert("멘토링 분야를 선택해주세요.");
    } else if (connectState.hashtags.length <= 0) {
      alert("관심 분야를 선택해주세요.");
    } else if (connectState.message.length === 0) {
      alert("요청 메세지를 입력해주세요.");
    } else {
      try {
        await postReservation({
          mentorId: mentorId,
          menteeId: userId,
          categoryId: connectState.categoryId,
          requestMessage: connectState.message,
          hashtags: connectState.hashtags,
        }).unwrap();
        alert("예약이 완료되었습니다.");
      } catch (e: BaseQueryError<any>) {
        if (e.status === 409) {
          alert("이미 예약이 완료된 멘토입니다.");
        } else {
          alert("예약이 실패하였습니다.");
        }
      }
      dispatch(CurrMentorSlice.actions.closeConnectModal());
      dispatch(MentorConnectSlice.actions.initMentorConnect());
    }
  };

42manito/src/utils/BaseQuery.ts

export const BaseQuery =
  (
    { baseUrl }: { baseUrl: string } = { baseUrl: "" },
  ): BaseQueryFn<
    {
      url: string;
      method: AxiosRequestConfig["method"];
      data?: AxiosRequestConfig["data"];
      params?: AxiosRequestConfig["params"];
    },
    unknown,
    ErrorResponse
  > =>
  async ({ url, method, data, params }) => {
    try {
      const accessToken = localStorage.getItem("accessToken");
      const result = await axios({
        url: baseUrl + url,
        method,
        data,
        params,
        headers: {
          ...(accessToken && { Authorization: `Bearer ${accessToken}` }), // 헤더에 토큰을 추가합니다.
        },
        timeout: 5000,
      });
      return { data: result.data };
    } catch (axiosError) {
      const err = axiosError as AxiosError;
      if (err.response) {
        const status = err.response.status;
        if (status === 400) {
          alert("잘못된 요청입니다.");
        } else if (status === 404) {
          alert("존재하지 않는 작업입니다.");
        } else if (status === 409) {
          alert("이미 완료된 작업입니다.");
        } else if (status === 401 || status === 403) {
          alert("권한이 없습니다.");
          Router.push("/");
        } else if (status === 500) {
          alert("서버에 오류가 발생했습니다.");
        } else if (status === 503) {
          alert("서버가 점검중입니다.");
        }
      } else {
        console.error(err.message);
      }

      return {
        error: {
          status: err.response?.status,
          data: err.response?.data || err.message,
        },
      };
    }
  };

재현 방법
재현 방법은 다음과 같이 기술합니다.
이미 예약 과정 안에 있는 멘토에게 다시 예약 신청

정상 동작
alert가 하나만 떠야 할 것 같아염

@jinaji jinaji added the bug Something isn't working label Oct 6, 2023
@JuneParkCode
Copy link
Member

409 alert 제외하는걸로 해결하겠습니다. (409 응답은 따로 처리되고 있음)
#240 에서 수정예정

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants