99 lines
3.5 KiB
TypeScript
99 lines
3.5 KiB
TypeScript
import { Request, Response } from 'express';
|
|
import { requireFields } from './error-helper';
|
|
import { getLearningObjectId, getQuestionId } from './questions';
|
|
import { createAnswer, deleteAnswer, getAnswer, getAnswersByQuestion, updateAnswer } from '../services/answers';
|
|
import { FALLBACK_SEQ_NUM } from '../config';
|
|
import { AnswerData } from '@dwengo-1/common/interfaces/answer';
|
|
|
|
export async function getAnswersHandler(req: Request, res: Response): Promise<void> {
|
|
const hruid = req.params.hruid;
|
|
const version = req.params.version;
|
|
const language = req.query.lang as string;
|
|
const seq = req.params.seq;
|
|
const full = req.query.full === 'true';
|
|
requireFields({ hruid });
|
|
|
|
const learningObjectId = getLearningObjectId(hruid, version, language);
|
|
const questionId = getQuestionId(learningObjectId, seq);
|
|
|
|
const answers = await getAnswersByQuestion(questionId, full);
|
|
|
|
res.json({ answers });
|
|
}
|
|
|
|
export async function getAnswerHandler(req: Request, res: Response): Promise<void> {
|
|
const hruid = req.params.hruid;
|
|
const version = req.params.version;
|
|
const language = req.query.lang as string;
|
|
const seq = req.params.seq;
|
|
const seqAnswer = req.params.seqAnswer;
|
|
requireFields({ hruid });
|
|
|
|
const learningObjectId = getLearningObjectId(hruid, version, language);
|
|
const questionId = getQuestionId(learningObjectId, seq);
|
|
|
|
const sequenceNumber = Number(seqAnswer) || FALLBACK_SEQ_NUM;
|
|
const answer = await getAnswer(questionId, sequenceNumber);
|
|
|
|
res.json({ answer });
|
|
}
|
|
|
|
export async function createAnswerHandler(req: Request, res: Response): Promise<void> {
|
|
const hruid = req.params.hruid;
|
|
const version = req.params.version;
|
|
const language = req.query.lang as string;
|
|
const seq = req.params.seq;
|
|
requireFields({ hruid });
|
|
|
|
const learningObjectId = getLearningObjectId(hruid, version, language);
|
|
const questionId = getQuestionId(learningObjectId, seq);
|
|
|
|
const author = req.body.author as string;
|
|
const content = req.body.content as string;
|
|
requireFields({ author, content });
|
|
|
|
const answerData = req.body as AnswerData;
|
|
|
|
const answer = await createAnswer(questionId, answerData);
|
|
|
|
res.json({ answer });
|
|
}
|
|
|
|
export async function deleteAnswerHandler(req: Request, res: Response): Promise<void> {
|
|
const hruid = req.params.hruid;
|
|
const version = req.params.version;
|
|
const language = req.query.lang as string;
|
|
const seq = req.params.seq;
|
|
const seqAnswer = req.params.seqAnswer;
|
|
requireFields({ hruid });
|
|
|
|
const learningObjectId = getLearningObjectId(hruid, version, language);
|
|
const questionId = getQuestionId(learningObjectId, seq);
|
|
|
|
const sequenceNumber = Number(seqAnswer) || FALLBACK_SEQ_NUM;
|
|
const answer = await deleteAnswer(questionId, sequenceNumber);
|
|
|
|
res.json({ answer });
|
|
}
|
|
|
|
export async function updateAnswerHandler(req: Request, res: Response): Promise<void> {
|
|
const hruid = req.params.hruid;
|
|
const version = req.params.version;
|
|
const language = req.query.lang as string;
|
|
const seq = req.params.seq;
|
|
const seqAnswer = req.params.seqAnswer;
|
|
requireFields({ hruid });
|
|
|
|
const learningObjectId = getLearningObjectId(hruid, version, language);
|
|
const questionId = getQuestionId(learningObjectId, seq);
|
|
|
|
const content = req.body.content as string;
|
|
requireFields({ content });
|
|
|
|
const answerData = req.body as AnswerData;
|
|
|
|
const sequenceNumber = Number(seqAnswer) || FALLBACK_SEQ_NUM;
|
|
const answer = await updateAnswer(questionId, sequenceNumber, answerData);
|
|
|
|
res.json({ answer });
|
|
}
|