46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
// server/api/records.get.ts - 用户问答记录接口,供 Nuxt Dashboard 表格展示
|
|
import { getQuery } from "h3";
|
|
|
|
import { createApiLogger } from "~~/server/utils/logging";
|
|
import { getQaRecords } from "~~/server/utils/runtimeState";
|
|
|
|
/**
|
|
* 用户问答记录接口(分页,最新在前)
|
|
*
|
|
* 安全边界:
|
|
* - 必须携带有效 session cookie(由 api-auth middleware 统一鉴权)
|
|
* - 只返回当前登录用户自己的记录,用 userId 严格隔离
|
|
* - 不包含 OpenAI 响应体、API Key 或内部错误
|
|
*/
|
|
export default defineEventHandler(async (event) => {
|
|
const logger = createApiLogger(event, "api.records");
|
|
|
|
const query = getQuery(event);
|
|
const rawPage = Number.parseInt(query.page?.toString() || "1", 10);
|
|
const rawSize = Number.parseInt(query.size?.toString() || "10", 10);
|
|
const size = Number.isFinite(rawSize)
|
|
? Math.min(Math.max(rawSize, 1), 100)
|
|
: 10;
|
|
const page = Number.isFinite(rawPage) ? Math.max(rawPage, 1) : 1;
|
|
|
|
const { records, total } = await getQaRecords(event.context.auth!.user.id, {
|
|
page,
|
|
size
|
|
});
|
|
|
|
logger.info("finish_success", {
|
|
page,
|
|
size,
|
|
total,
|
|
count: records.length
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
records,
|
|
page,
|
|
size,
|
|
total
|
|
};
|
|
});
|