mirror of
https://github.com/cfngc4594/monaco-editor-lsp-next.git
synced 2025-07-04 17:30:52 +00:00
59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
|
// app/actions/get-problem-data.ts
|
|||
|
'use server';
|
|||
|
|
|||
|
import prisma from '@/lib/prisma';
|
|||
|
import { serialize } from 'next-mdx-remote/serialize';
|
|||
|
|
|||
|
export async function getProblemData(problemId: string) {
|
|||
|
const problem = await prisma.problem.findUnique({
|
|||
|
where: { id: problemId },
|
|||
|
include: {
|
|||
|
localizations: true,
|
|||
|
templates: true,
|
|||
|
testcases: {
|
|||
|
include: { inputs: true }
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
if (!problem) {
|
|||
|
throw new Error('Problem not found');
|
|||
|
}
|
|||
|
|
|||
|
const getContent = (type: string) =>
|
|||
|
problem.localizations.find(loc => loc.type === type)?.content || '';
|
|||
|
|
|||
|
const rawDescription = getContent('DESCRIPTION');
|
|||
|
|
|||
|
// MDX序列化,给客户端渲染用
|
|||
|
const mdxDescription = await serialize(rawDescription, {
|
|||
|
// 可以根据需要添加MDX插件配置
|
|||
|
parseFrontmatter: false,
|
|||
|
});
|
|||
|
|
|||
|
return {
|
|||
|
id: problem.id,
|
|||
|
displayId: problem.displayId,
|
|||
|
difficulty: problem.difficulty,
|
|||
|
isPublished: problem.isPublished,
|
|||
|
timeLimit: problem.timeLimit,
|
|||
|
memoryLimit: problem.memoryLimit,
|
|||
|
title: getContent('TITLE'),
|
|||
|
description: rawDescription,
|
|||
|
mdxDescription, // 新增序列化后的字段
|
|||
|
solution: getContent('SOLUTION'),
|
|||
|
templates: problem.templates.map(t => ({
|
|||
|
language: t.language,
|
|||
|
content: t.content
|
|||
|
})),
|
|||
|
testcases: problem.testcases.map(tc => ({
|
|||
|
id: tc.id,
|
|||
|
expectedOutput: tc.expectedOutput,
|
|||
|
inputs: tc.inputs.map(input => ({
|
|||
|
name: input.name,
|
|||
|
value: input.value
|
|||
|
}))
|
|||
|
}))
|
|||
|
};
|
|||
|
}
|