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}",
"본인인증 처리 중 일시적인 문제가 발생했습니다. 잠시 후 다시 시도해 주세요.");
}
}
}