45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
// server/api/records.get.ts - 最近问答记录接口,供 Nuxt Dashboard 表格展示
|
|
import { setResponseStatus } from "h3";
|
|
|
|
import {
|
|
invalidAccessTokenResponse,
|
|
verifyAccessToken
|
|
} from "~~/server/utils/auth";
|
|
import { createApiLogger } from "~~/server/utils/logging";
|
|
import { getQaRecords } from "~~/server/utils/runtimeState";
|
|
|
|
/**
|
|
* 最近问答记录接口
|
|
*
|
|
* 旧 Python Dashboard 直接在服务端模板里读取内存 records;迁移到 Nuxt 后,
|
|
* 前端表格需要一个 JSON 数据源,所以这里暴露同样的内存记录副本。
|
|
*
|
|
* 安全边界:
|
|
* - 配置 ACCESS_TOKEN 时必须携带 `X-Access-Token` 或 query `token`
|
|
* - 这里只返回题目、选项和最终答案,不包含 OpenAI 响应体、API Key 或内部错误
|
|
* - 记录仅存在当前进程内,重启或多实例部署不会共享
|
|
*/
|
|
export default defineEventHandler((event) => {
|
|
const logger = createApiLogger(event, "api.records");
|
|
|
|
if (!verifyAccessToken(event)) {
|
|
setResponseStatus(event, 403);
|
|
logger.warn("invalid_access_token");
|
|
return {
|
|
success: false,
|
|
message: invalidAccessTokenResponse().msg,
|
|
records: []
|
|
};
|
|
}
|
|
|
|
const records = getQaRecords();
|
|
logger.info("finish_success", {
|
|
count: records.length
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
records
|
|
};
|
|
});
|