101 lines
3.5 KiB
TypeScript
101 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 });
|
|
}
|