fix: 피드백 리스트 표시 오류
Deploy EG-BIM QA Gateway / deploy (push) Successful in 42s

This commit is contained in:
root committed 2026-09-28 19:11:30 +09:00
1 parent 72c69af2fd
commit 721511fd1b
1 file changed
+20 -12
+20 -12
View File
@@ -443,21 +443,29 @@ async function listFeedbacks(request, env, url) {
if (!env.ABC_API_KEY) return json({ error: "feedback_api_not_configured" }, 503);
if (!env.ABC_PROJECT_ID || !env.ABC_CHANNEL_ID) return json({ error: "feedback_target_not_configured" }, 503);
const apiBaseUrl = String(env.ABC_API_BASE_URL || "https://feedback.hmac.kr").replace(/\/$/, "");
const endpoint = new URL(apiBaseUrl + "/api/projects/" + encodeURIComponent(env.ABC_PROJECT_ID) + "/channels/" + encodeURIComponent(env.ABC_CHANNEL_ID) + "/feedbacks");
["cursor", "searchText", "fieldKey", "issueName"].forEach((key) => {
const value = url.searchParams.get(key);
if (value) endpoint.searchParams.set(key, value);
});
const configuredBaseUrl = String(env.ABC_API_BASE_URL || "https://feedback.hmac.kr");
const apiBaseUrl = configuredBaseUrl.endsWith("/") ? configuredBaseUrl.slice(0, -1) : configuredBaseUrl;
const endpoint = apiBaseUrl + "/api/v2/projects/" + encodeURIComponent(env.ABC_PROJECT_ID) + "/channels/" + encodeURIComponent(env.ABC_CHANNEL_ID) + "/feedbacks/search";
const requestedLimit = Number(url.searchParams.get("limit") || 100);
const requestedPage = Number(url.searchParams.get("page") || 1);
endpoint.searchParams.set("limit", String(Number.isFinite(requestedLimit) ? Math.min(Math.max(Math.floor(requestedLimit), 1), 100) : 100));
endpoint.searchParams.set("page", String(Number.isFinite(requestedPage) ? Math.max(Math.floor(requestedPage), 1) : 1));
const payload = {
limit: Number.isFinite(requestedLimit) ? Math.min(Math.max(Math.floor(requestedLimit), 1), 100) : 100,
page: Number.isFinite(requestedPage) ? Math.max(Math.floor(requestedPage), 1) : 1,
sort: { createdAt: "DESC" }
};
const searchText = url.searchParams.get("searchText");
const fieldKey = url.searchParams.get("fieldKey");
const issueName = url.searchParams.get("issueName");
if (searchText && fieldKey) payload.queries = [{ key: fieldKey, value: searchText, condition: "CONTAINS" }];
if (issueName) payload.queries = [{ key: "issueName", value: issueName, condition: "IS" }];
let response;
try {
response = await fetch(endpoint, { method: "GET", headers: { accept: "application/json", "x-api-key": env.ABC_API_KEY } });
response = await fetch(endpoint, {
method: "POST",
headers: { accept: "application/json", "content-type": "application/json", "x-api-key": env.ABC_API_KEY },
body: JSON.stringify(payload)
});
} catch (error) {
console.error("feedback_list_api_request_failed", error instanceof Error ? error.message : "unknown");
return json({ error: "feedback_api_unreachable" }, 502);
@@ -470,8 +478,8 @@ async function listFeedbacks(request, env, url) {
return json({ error: "feedback_api_rejected", message: upstreamMessage || "문의 목록 조회에 실패했습니다.", status: response.status }, response.status >= 500 ? 502 : response.status);
}
const items = Array.isArray(result) ? result : (result.items || result.data?.items || []);
const meta = result.meta || result.data?.meta || {};
const items = Array.isArray(result) ? result : (result.items || (Array.isArray(result.data) ? result.data : result.data && result.data.items) || []);
const meta = result.meta || result.data && result.data.meta || {};
return json({ items: Array.isArray(items) ? items : [], meta });
}