This commit is contained in:
1 parent
72c69af2fd
commit
721511fd1b
1 file changed
+20
-12
+20
-12
@@ -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 });
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user