diff --git a/src/modules/questions/data-access.ts b/src/modules/questions/data-access.ts index 1cb6710..bcb870e 100644 --- a/src/modules/questions/data-access.ts +++ b/src/modules/questions/data-access.ts @@ -492,26 +492,34 @@ export type QuestionContentForErrorCollection = { type: string } -export const getQuestionsContentForErrorCollection = cache( - async (questionIds: string[]): Promise> => { - const result = new Map() - const uniqueIds = Array.from(new Set(questionIds.filter((v): v is string => typeof v === "string" && v.length > 0))) - if (uniqueIds.length === 0) return result +export const getQuestionsContentForErrorCollectionRaw = async ( + questionIds: string[], +): Promise> => { + const result = new Map() + const uniqueIds = Array.from(new Set(questionIds.filter((v): v is string => typeof v === "string" && v.length > 0))) + if (uniqueIds.length === 0) return result - const rows = await db - .select({ - id: questions.id, - content: questions.content, - type: questions.type, - }) - .from(questions) - .where(inArray(questions.id, uniqueIds)) + const rows = await db + .select({ + id: questions.id, + content: questions.content, + type: questions.type, + }) + .from(questions) + .where(inArray(questions.id, uniqueIds)) - for (const r of rows) { - result.set(r.id, { content: r.content, type: r.type }) - } - return result + for (const r of rows) { + result.set(r.id, { content: r.content, type: r.type }) } + return result +} +export const getQuestionsContentForErrorCollection = cacheFn( + getQuestionsContentForErrorCollectionRaw, + { + tags: ["questions"], + ttl: 300, + keyParts: ["questions", "getQuestionsContentForErrorCollection"], + }, ) /** @@ -522,23 +530,28 @@ export const getQuestionsContentForErrorCollection = cache( * * 返回 Map,未找到的 ID 不会出现在 Map 中。 */ -export const getQuestionTypeMapByIds = cache( - async (questionIds: string[]): Promise> => { - const result = new Map() - const uniqueIds = Array.from(new Set(questionIds.filter((v): v is string => typeof v === "string" && v.length > 0))) - if (uniqueIds.length === 0) return result +export const getQuestionTypeMapByIdsRaw = async ( + questionIds: string[], +): Promise> => { + const result = new Map() + const uniqueIds = Array.from(new Set(questionIds.filter((v): v is string => typeof v === "string" && v.length > 0))) + if (uniqueIds.length === 0) return result - const rows = await db - .select({ id: questions.id, type: questions.type }) - .from(questions) - .where(inArray(questions.id, uniqueIds)) + const rows = await db + .select({ id: questions.id, type: questions.type }) + .from(questions) + .where(inArray(questions.id, uniqueIds)) - for (const r of rows) { - result.set(r.id, r.type) - } - return result + for (const r of rows) { + result.set(r.id, r.type) } -) + return result +} +export const getQuestionTypeMapByIds = cacheFn(getQuestionTypeMapByIdsRaw, { + tags: ["questions"], + ttl: 300, + keyParts: ["questions", "getQuestionTypeMapByIds"], +}) // --------------------------------------------------------------------------- // 导入/导出接口