Describe
#299에서 API 오류 처리를 AppException + guardApiCall 공통 규칙으로 정리했지만, 예약 조회(폴링)와 로그아웃은 범위에서 빠져 자체 오류 처리 경로가 남아 있습니다. 그래서 같은 오류라도 화면마다 다른 문구가 나오고, 일부 경우는 잘못 안내됩니다.
reservation_status_provider의 _pollingErrorFor가 공통 규칙과 별개로 문구를 매핑함 (예: 타임아웃 → "서버 응답 시간이 초과되었습니다.", 그 밖의 5xx → "서버 오류가 발생했습니다. (500)")
- 같은 파일에
DioException catch와 일반 catch가 중복되어 있음
- 고정 문구가 없는 5xx(500 등)에서 서버
message를 그대로 노출함 → 스택/예외명 같은 기술적 문구가 사용자에게 보일 수 있음
- 토큰 갱신 실패·로그아웃으로 인터셉터가 요청을 취소(
DioExceptionType.cancel)하면 AppException이 이를 "네트워크 연결을 확인해주세요."로 변환함 → 예약 등 액션 실패 토스트가 잘못 안내됨 (폴링만 따로 걸러내고 있었음)
logout_provider가 guardApiCall 대신 직접 try-catch + 로깅을 반복함
계획
AppException에 isCancelled를 추가해 앱이 스스로 취소한 요청을 구분하고, 에러 토스트·폴링 모두 이를 안내하지 않음
- 5xx 중 고정 문구가 없는 경우 서버 메시지 대신 일반 서버 오류 문구를 사용
- 폴링 전용 매핑(
_pollingErrorFor)을 제거하고 AppException.from으로 통일, 중복 catch 블록 병합
- 로그아웃 provider를
guardApiCall 패턴으로 교체
Additional
Describe
#299에서 API 오류 처리를
AppException+guardApiCall공통 규칙으로 정리했지만, 예약 조회(폴링)와 로그아웃은 범위에서 빠져 자체 오류 처리 경로가 남아 있습니다. 그래서 같은 오류라도 화면마다 다른 문구가 나오고, 일부 경우는 잘못 안내됩니다.reservation_status_provider의_pollingErrorFor가 공통 규칙과 별개로 문구를 매핑함 (예: 타임아웃 → "서버 응답 시간이 초과되었습니다.", 그 밖의 5xx → "서버 오류가 발생했습니다. (500)")DioExceptioncatch와 일반 catch가 중복되어 있음message를 그대로 노출함 → 스택/예외명 같은 기술적 문구가 사용자에게 보일 수 있음DioExceptionType.cancel)하면AppException이 이를 "네트워크 연결을 확인해주세요."로 변환함 → 예약 등 액션 실패 토스트가 잘못 안내됨 (폴링만 따로 걸러내고 있었음)logout_provider가guardApiCall대신 직접 try-catch + 로깅을 반복함계획
AppException에isCancelled를 추가해 앱이 스스로 취소한 요청을 구분하고, 에러 토스트·폴링 모두 이를 안내하지 않음_pollingErrorFor)을 제거하고AppException.from으로 통일, 중복 catch 블록 병합guardApiCall패턴으로 교체Additional
AppException한 곳으로 모여야 #306의 errorCode 우선 분기를 한 곳에 추가할 수 있습니다. 예약 액션(reservation_action_provider)의 원인별 매핑 자체는 🐛 :: 예약 오류 원인이 상태 코드 고정 문구로 왜곡되는 문제 #306 범위로 남깁니다.