Files
Nexus_Edu/backend/src/controllers/question.controller.ts

86 lines
3.0 KiB
TypeScript

import { Response } from 'express';
import { AuthRequest } from '../middleware/auth.middleware';
import { questionService } from '../services/question.service';
// POST /api/questions/search
// 简单的题目搜索(按科目、难度筛选)
export const searchQuestions = async (req: AuthRequest, res: Response) => {
try {
const result = await questionService.search(req.userId!, req.body);
res.json(result);
} catch (error) {
console.error('Search questions error:', error);
res.status(500).json({ error: 'Failed to search questions' });
}
};
// POST /api/questions
// 创建题目
export const createQuestion = async (req: AuthRequest, res: Response) => {
try {
try {
const result = await questionService.create(req.userId!, req.body);
res.json(result);
} catch (e: any) {
if (e.message === 'Missing required fields') return res.status(400).json({ error: e.message });
throw e;
}
} catch (error) {
console.error('Create question error:', error);
res.status(500).json({ error: 'Failed to create question' });
}
};
// PUT /api/questions/:id
export const updateQuestion = async (req: AuthRequest, res: Response) => {
try {
const { id } = req.params;
try {
const result = await questionService.update(req.userId!, id, req.body);
res.json(result);
} catch (e: any) {
if (e.message === 'Question not found') return res.status(404).json({ error: e.message });
if (e.message === 'Permission denied') return res.status(403).json({ error: e.message });
throw e;
}
} catch (error) {
console.error('Update question error:', error);
res.status(500).json({ error: 'Failed to update question' });
}
};
// DELETE /api/questions/:id
export const deleteQuestion = async (req: AuthRequest, res: Response) => {
try {
const { id } = req.params;
try {
const result = await questionService.softDelete(req.userId!, id);
res.json(result);
} catch (e: any) {
if (e.message === 'Question not found') return res.status(404).json({ error: e.message });
if (e.message === 'Permission denied') return res.status(403).json({ error: e.message });
throw e;
}
} catch (error) {
console.error('Delete question error:', error);
res.status(500).json({ error: 'Failed to delete question' });
}
};
// POST /api/questions/parse-text
export const parseText = async (req: AuthRequest, res: Response) => {
try {
try {
const { text } = req.body;
const questions = questionService.parseText(text);
res.json(questions);
} catch (e: any) {
if (e.message === 'Text is required') return res.status(400).json({ error: e.message });
throw e;
}
} catch (error) {
console.error('Parse text error:', error);
res.status(500).json({ error: 'Failed to parse text' });
}
};