82 lines
1.9 KiB
TypeScript
82 lines
1.9 KiB
TypeScript
import type { IImageHistoryListData } from "#shared/types/openai";
|
|
import {
|
|
clearNewApiAuthCookies,
|
|
createApiLogger,
|
|
createErrorResponse,
|
|
createSuccessResponse,
|
|
createUpstreamErrorResponse,
|
|
getNewApiUserIdFromCookie,
|
|
isUnauthorizedError,
|
|
listImageGenerationHistory,
|
|
toSafeLogError
|
|
} from "~~/server/utils";
|
|
|
|
const DEFAULT_PAGE = 1;
|
|
const DEFAULT_PAGE_SIZE = 10;
|
|
const MAX_PAGE_SIZE = 50;
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const logger = createApiLogger("images.history.list");
|
|
logger.info("开始");
|
|
|
|
try {
|
|
const userId = getNewApiUserIdFromCookie(event);
|
|
const query = getQuery(event);
|
|
const page = normalizePositiveInt(query.page, DEFAULT_PAGE);
|
|
const pageSize = Math.min(
|
|
normalizePositiveInt(query.size, DEFAULT_PAGE_SIZE),
|
|
MAX_PAGE_SIZE
|
|
);
|
|
|
|
logger.info("查询参数", {
|
|
userId,
|
|
page,
|
|
pageSize
|
|
});
|
|
|
|
const result = await listImageGenerationHistory({
|
|
userId,
|
|
page,
|
|
pageSize
|
|
});
|
|
|
|
logger.done("成功", {
|
|
userId,
|
|
page,
|
|
pageSize,
|
|
total: result.total,
|
|
itemCount: result.items.length
|
|
});
|
|
|
|
return createSuccessResponse<IImageHistoryListData>(
|
|
result,
|
|
"获取生图历史成功"
|
|
);
|
|
} catch (error) {
|
|
if (isUnauthorizedError(error)) {
|
|
clearNewApiAuthCookies(event);
|
|
logger.warn("未登录或登录态失效", {
|
|
error: toSafeLogError(error)
|
|
});
|
|
return createErrorResponse(401, "未登录");
|
|
}
|
|
|
|
logger.error("失败", {
|
|
error: toSafeLogError(error)
|
|
});
|
|
return createUpstreamErrorResponse(error, "获取生图历史失败");
|
|
}
|
|
});
|
|
|
|
const normalizePositiveInt = (
|
|
value: unknown,
|
|
fallbackValue: number
|
|
): number => {
|
|
const rawValue = Array.isArray(value) ? value[0] : value;
|
|
const numberValue = Number.parseInt(String(rawValue ?? ""), 10);
|
|
|
|
return Number.isInteger(numberValue) && numberValue > 0
|
|
? numberValue
|
|
: fallbackValue;
|
|
};
|