From 88841463658fe328670766c65675014ad0a240f8 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 21 Sep 2026 15:29:10 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B4=80=EB=A6=AC=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=A0=84=EC=86=A1=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EB=A9=94=EC=84=B8=EC=A7=80=20=ED=91=9C=EC=8B=9C5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/qa-feedback-api-integration-task.md | 2 +- src/index.js | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/qa-feedback-api-integration-task.md b/docs/qa-feedback-api-integration-task.md index b19d5c9..dc1f988 100644 --- a/docs/qa-feedback-api-integration-task.md +++ b/docs/qa-feedback-api-integration-task.md @@ -104,4 +104,4 @@ npx wrangler secret put ABC_API_KEY --name baron-qa-gateway-test - ABC 문서에는 현재 `/api/projects/...` 경로가 실제 시나리오로 기재되어 있다. - `/api/v1/...`는 패키징 권장 경로로 문서화되어 있으므로 1차 구현은 현재 운영 시나리오인 `/api/...`를 사용한다. - UUID v7 정책에 맞춰 현재 브라우저의 UUID v4 생성 로직을 교체한다. -- 현재 공개 생성 API에서 실제로 확인된 메타데이터는 `requester_id`, `requester_tenant_id`, `requester_email`, `requester_name`, `requester_department`, `requester_phone_number`, `is_secret`다. `requester_affiliation`은 실제 요청에서 `invalid field key`로 거부되어 1차 저장 payload에서 제외했다. 나머지 확장 메타데이터는 서버 endpoint 지원 여부를 확인한 뒤 다시 추가한다. +- 현재 공개 생성 API에서 실제로 확인된 메타데이터는 `requester_id`, `requester_tenant_id`, `requester_email`, `requester_name`, `requester_department`, `requester_phone_number`, `is_secret`다. 모든 값은 문자열로 전송하며 `is_secret`은 반드시 `"true"` 또는 `"false"`를 사용한다. `requester_affiliation`은 실제 요청에서 `invalid field key`로 거부되어 1차 저장 payload에서 제외했다. 나머지 확장 메타데이터는 서버 endpoint 지원 여부를 확인한 뒤 다시 추가한다. diff --git a/src/index.js b/src/index.js index ef2494b..367243a 100644 --- a/src/index.js +++ b/src/index.js @@ -312,10 +312,11 @@ async function createFeedback(request, env) { if (!['ERROR_QNA', 'IMPROVEMENT_QNA', 'GENERAL_QNA'].includes(category)) return json({ error: 'invalid_category' }, 400); const feedbackId = isUuidv7(input.feedbackId) ? input.feedbackId : uuidv7(); - const requesterId = user.requesterId || user.ssoSubject || user.userUuid; - const requesterTenantId = user.requesterTenantId || user.tenantId; + const requesterId = String(user.requesterId || user.ssoSubject || user.userUuid || ''); + const requesterTenantId = String(user.requesterTenantId || user.tenantId || ''); if (!requesterId || !requesterTenantId) return json({ error: 'requester_identity_missing' }, 422); - if (!user.phone) return json({ error: 'requester_phone_missing' }, 422); + const requesterPhone = String(user.phone || ''); + if (!requesterPhone) return json({ error: 'requester_phone_missing' }, 422); const upstreamPayload = { title, @@ -323,11 +324,11 @@ async function createFeedback(request, env) { Category: category, requester_id: requesterId, requester_tenant_id: requesterTenantId, - requester_email: user.email || '', - requester_name: user.name || '', - requester_department: user.department || '', - requester_phone_number: user.phone, - is_secret: input.is_secret ? 1 : 0 + requester_email: String(user.email || ''), + requester_name: String(user.name || ''), + requester_department: String(user.department || ''), + requester_phone_number: requesterPhone, + is_secret: input.is_secret === true || input.is_secret === 'true' || input.is_secret === 1 || input.is_secret === '1' ? 'true' : 'false' }; if (Array.isArray(input.images) && input.images.length) upstreamPayload.images = input.images;