fix:전자서명 done 페이지 계약/서명자 정보 표시 수정

getContract API가 항상 데이터를 반환하되 is_signable 플래그로
서명 가능 여부를 전달하도록 변경. done 페이지에서 signed/completed
상태의 계약도 정상적으로 정보를 표시할 수 있도록 수정.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-14 13:18:17 +09:00
parent 489b65410e
commit 36627b976d
2 changed files with 28 additions and 18 deletions

View File

@@ -64,32 +64,35 @@ public function getContract(string $token): JsonResponse
return response()->json(['success' => false, 'message' => '계약을 찾을 수 없습니다.'], 404);
}
// 계약 상태 체크: 서명 불가한 상태면 에러 반환
$statusMessages = [
// 서명 가능 여부 판별
$isSignable = in_array($contract->status, ['pending', 'partially_signed'])
&& in_array($signer->status, ['notified', 'viewing', 'authenticated']);
$statusMessage = null;
$unsignableStatuses = [
'draft' => '아직 발송되지 않은 계약입니다.',
'cancelled' => '취소된 계약입니다.',
'rejected' => '거절된 계약입니다.',
'completed' => '이미 완료된 계약입니다.',
];
if (isset($statusMessages[$contract->status])) {
return response()->json(['success' => false, 'message' => $statusMessages[$contract->status]], 400);
if (isset($unsignableStatuses[$contract->status])) {
$statusMessage = $unsignableStatuses[$contract->status];
} elseif ($signer->status === 'signed') {
$statusMessage = '이미 서명을 완료하였습니다.';
}
// 서명자가 이미 서명 완료한 경우
if ($signer->status === 'signed') {
return response()->json(['success' => false, 'message' => '이미 서명을 완료하였습니다.'], 400);
// 서명 가능한 상태에서만 감사 로그 기록
if ($isSignable) {
EsignAuditLog::create([
'tenant_id' => $contract->tenant_id,
'contract_id' => $contract->id,
'signer_id' => $signer->id,
'action' => 'viewed',
'ip_address' => request()->ip(),
'user_agent' => request()->userAgent(),
'created_at' => now(),
]);
}
EsignAuditLog::create([
'tenant_id' => $contract->tenant_id,
'contract_id' => $contract->id,
'signer_id' => $signer->id,
'action' => 'viewed',
'ip_address' => request()->ip(),
'user_agent' => request()->userAgent(),
'created_at' => now(),
]);
return response()->json([
'success' => true,
'data' => [
@@ -101,7 +104,10 @@ public function getContract(string $token): JsonResponse
'role' => $signer->role,
'status' => $signer->status,
'has_stamp' => (bool) $signer->signature_image_path,
'signed_at' => $signer->signed_at,
],
'is_signable' => $isSignable,
'status_message' => $statusMessage,
],
]);
}