frontPanel/src/api/question.ts

86 lines
2.5 KiB
TypeScript
Raw Normal View History

2023-11-02 16:45:28 +00:00
import { makeRequest } from "@frontend/kitui";
import { CreateQuestionRequest } from "model/question/create";
2023-11-14 20:15:52 +00:00
import { RawQuestion } from "model/question/question";
2023-11-02 16:45:28 +00:00
import { GetQuestionListRequest, GetQuestionListResponse } from "model/question/getList";
import { EditQuestionRequest, EditQuestionResponse } from "model/question/edit";
import { DeleteQuestionRequest, DeleteQuestionResponse } from "model/question/delete";
import { CopyQuestionRequest, CopyQuestionResponse } from "model/question/copy";
const baseUrl = process.env.NODE_ENV === "production" ? "/squiz" : "https://squiz.pena.digital/squiz";
2023-11-14 20:15:52 +00:00
function createQuestion(body?: Partial<CreateQuestionRequest>) {
return makeRequest<CreateQuestionRequest, RawQuestion>({
2023-11-02 16:45:28 +00:00
url: `${baseUrl}/question/create`,
2023-11-14 20:15:52 +00:00
body: { ...defaultCreateQuestionBody, ...body },
2023-11-02 16:45:28 +00:00
method: "POST",
});
}
2023-11-14 20:15:52 +00:00
async function getQuestionList(body?: Partial<GetQuestionListRequest>) {
if (!body?.quiz_id) return null;
const response = await makeRequest<GetQuestionListRequest, GetQuestionListResponse>({
2023-11-02 16:45:28 +00:00
url: `${baseUrl}/question/getList`,
2023-11-14 20:15:52 +00:00
body: { ...defaultGetQuestionListBody, ...body },
method: "POST",
2023-11-02 16:45:28 +00:00
});
2023-11-14 20:15:52 +00:00
return response.items;
}
2023-11-02 16:45:28 +00:00
2023-11-14 20:15:52 +00:00
function editQuestion(body: EditQuestionRequest, signal?: AbortSignal) {
2023-11-02 16:45:28 +00:00
return makeRequest<EditQuestionRequest, EditQuestionResponse>({
url: `${baseUrl}/question/edit`,
body,
method: "PATCH",
signal,
});
}
2023-11-14 20:15:52 +00:00
function copyQuestion(copyQuestionBody: CopyQuestionRequest) {
2023-11-02 16:45:28 +00:00
return makeRequest<CopyQuestionRequest, CopyQuestionResponse>({
url: `${baseUrl}/question/copy`,
body: copyQuestionBody,
method: "POST",
});
}
2023-11-14 20:15:52 +00:00
function deleteQuestion(id: number) {
2023-11-02 16:45:28 +00:00
return makeRequest<DeleteQuestionRequest, DeleteQuestionResponse>({
url: `${baseUrl}/question/delete`,
body: { id },
method: "DELETE",
});
}
export const questionApi = {
create: createQuestion,
getList: getQuestionList,
edit: editQuestion,
copy: copyQuestion,
delete: deleteQuestion,
};
const defaultCreateQuestionBody: CreateQuestionRequest = {
"quiz_id": 0,
"title": "string",
"description": "string",
2023-11-14 20:15:52 +00:00
"type": "variant",
2023-11-02 16:45:28 +00:00
"required": true,
"page": 0,
"content": "string",
};
const defaultGetQuestionListBody: GetQuestionListRequest = {
"limit": 0,
"offset": 0,
"from": 0,
"to": 0,
"search": "string",
"type": "string",
"deleted": true,
"required": true,
};