using SharedKernel.Results; namespace Infrastructure.Kyc.Nice; /// /// NICE result_code → DPOT 매핑. 가이드 §4 응답 코드 + Handler 매핑 정책. /// 사용자에게 보일 메시지는 친절한 한국어로. 시스템 오류는 통합해서 일반 메시지로. /// internal static class NiceErrorMap { /// /// 가 "0000" 일 때 호출하면 안 됨 (caller 가 success 처리). /// /// "token" / "url" / "result" — 에러 코드 prefix 구성용. public static Error Map(string? resultCode, string operation) { switch (resultCode) { // ── 사용자 직접 원인 ─────────────────────────────────── case "3032": case "3033": return Error.Problem( "Nice.AuthFailedOrExpired", "본인인증에 실패했거나 유효시간이 만료되었습니다. 다시 시도해 주세요."); // ── 토큰 만료/유효성 (caller 가 cache 무효화 + 재시도 가능) ─ case "1003": case "1004": case "3043": return Error.Problem( "Nice.TokenInvalid", "본인인증 서비스 인증이 만료되었습니다. 다시 시도해 주세요."); // ── 가맹점 설정 문제 (운영자 알림 대상) ───────────────── case "1007": return Error.Forbidden( "Nice.IpNotAllowed", "본인인증 서비스 설정에 문제가 있습니다. 관리자에게 문의해 주세요."); case "1008": return Error.Problem( "Nice.RateLimited", "본인인증 서비스 요청이 일시적으로 많습니다. 잠시 후 다시 시도해 주세요."); case "1006": case "1009": case "1012": return Error.Forbidden( "Nice.PermissionDenied", "본인인증 서비스 권한 설정에 문제가 있습니다. 관리자에게 문의해 주세요."); // ── 무결성/위변조 (운영자 알림 대상) ─────────────────── case "3025": case "3027": case "9402": return Error.Problem( "Nice.IntegrityFailed", "본인인증 응답 검증에 실패했습니다. 다시 시도해 주세요."); // ── 정보 없음 (transaction expired or mismatched) ────── case "3029": return Error.NotFound( "Nice.NotFound", "본인인증 정보를 찾을 수 없습니다. 다시 시도해 주세요."); // ── 응답 자체 없음 ───────────────────────────────────── case null: case "": return Error.Problem( "Nice.NoResponse", "본인인증 서버 응답이 없습니다. 잠시 후 다시 시도해 주세요."); // ── 기타 시스템 오류 ─────────────────────────────────── default: return Error.Problem( $"Nice.{operation}.{resultCode}", "본인인증 처리 중 일시적인 문제가 발생했습니다. 잠시 후 다시 시도해 주세요."); } } }