86 lines
3.0 KiB
TypeScript
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' });
|
|
}
|
|
};
|