2024-04-16 20:20:46 +00:00
|
|
|
import makeRequest from "@api/makeRequest";
|
2023-11-14 13:09:17 +00:00
|
|
|
import { defaultQuizConfig } from "@model/quizSettings";
|
2023-11-02 16:45:28 +00:00
|
|
|
import { CopyQuizRequest, CopyQuizResponse } from "model/quiz/copy";
|
|
|
|
import { CreateQuizRequest } from "model/quiz/create";
|
|
|
|
import { DeleteQuizRequest, DeleteQuizResponse } from "model/quiz/delete";
|
|
|
|
import { EditQuizRequest, EditQuizResponse } from "model/quiz/edit";
|
|
|
|
import { GetQuizRequest, GetQuizResponse } from "model/quiz/get";
|
|
|
|
import { GetQuizListRequest, GetQuizListResponse } from "model/quiz/getList";
|
2023-11-13 18:04:51 +00:00
|
|
|
import { RawQuiz } from "model/quiz/quiz";
|
2023-11-02 16:45:28 +00:00
|
|
|
|
2024-01-18 01:56:15 +00:00
|
|
|
const baseUrl = process.env.REACT_APP_DOMAIN + "/squiz";
|
|
|
|
const imagesUrl = process.env.REACT_APP_DOMAIN + "/squizstorer";
|
2023-11-02 16:45:28 +00:00
|
|
|
|
2023-11-13 18:04:51 +00:00
|
|
|
function createQuiz(body?: Partial<CreateQuizRequest>) {
|
2023-12-31 02:53:25 +00:00
|
|
|
return makeRequest<CreateQuizRequest, RawQuiz>({
|
|
|
|
url: `${baseUrl}/quiz/create`,
|
|
|
|
body: { ...defaultCreateQuizBody, ...body },
|
|
|
|
method: "POST",
|
|
|
|
});
|
2023-11-02 16:45:28 +00:00
|
|
|
}
|
|
|
|
|
2023-11-13 18:04:51 +00:00
|
|
|
async function getQuizList(body?: Partial<GetQuizListRequest>) {
|
2023-12-31 02:53:25 +00:00
|
|
|
const response = await makeRequest<GetQuizListRequest, GetQuizListResponse>({
|
|
|
|
url: `${baseUrl}/quiz/getList`,
|
|
|
|
body: { ...defaultGetQuizListBody, ...body },
|
|
|
|
method: "POST",
|
|
|
|
});
|
2023-11-13 18:04:51 +00:00
|
|
|
|
2023-12-31 02:53:25 +00:00
|
|
|
return response.items;
|
2023-11-02 16:45:28 +00:00
|
|
|
}
|
|
|
|
|
2023-11-13 18:04:51 +00:00
|
|
|
function getQuiz(body?: Partial<GetQuizRequest>) {
|
2023-12-31 02:53:25 +00:00
|
|
|
return makeRequest<GetQuizRequest, GetQuizResponse>({
|
|
|
|
url: `${baseUrl}/quiz/get`,
|
|
|
|
body: { ...defaultGetQuizBody, ...body },
|
|
|
|
method: "GET",
|
|
|
|
});
|
2023-11-02 16:45:28 +00:00
|
|
|
}
|
|
|
|
|
2023-11-13 18:04:51 +00:00
|
|
|
async function editQuiz(body: EditQuizRequest, signal?: AbortSignal) {
|
2023-12-31 02:53:25 +00:00
|
|
|
return makeRequest<EditQuizRequest, EditQuizResponse>({
|
|
|
|
url: `${baseUrl}/quiz/edit`,
|
|
|
|
body,
|
|
|
|
method: "PATCH",
|
|
|
|
signal,
|
|
|
|
});
|
2023-11-02 16:45:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function copyQuiz(id: number) {
|
2023-12-31 02:53:25 +00:00
|
|
|
return makeRequest<CopyQuizRequest, CopyQuizResponse>({
|
|
|
|
url: `${baseUrl}/quiz/copy`,
|
|
|
|
body: { id },
|
|
|
|
method: "POST",
|
|
|
|
});
|
2023-11-02 16:45:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function deleteQuiz(id: number) {
|
2023-12-31 02:53:25 +00:00
|
|
|
return makeRequest<DeleteQuizRequest, DeleteQuizResponse>({
|
|
|
|
url: `${baseUrl}/quiz/delete`,
|
|
|
|
body: { id },
|
|
|
|
method: "DELETE",
|
|
|
|
});
|
2023-11-02 16:45:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function addQuizImages(quizId: number, image: Blob) {
|
2023-12-31 02:53:25 +00:00
|
|
|
const formData = new FormData();
|
2023-11-02 16:45:28 +00:00
|
|
|
|
2023-12-31 02:53:25 +00:00
|
|
|
formData.append("quiz", quizId.toString());
|
|
|
|
formData.append("image", image);
|
2023-11-02 16:45:28 +00:00
|
|
|
|
2023-12-31 02:53:25 +00:00
|
|
|
return makeRequest<FormData, { [key: string]: string }>({
|
|
|
|
url: `${imagesUrl}/quiz/putImages`,
|
|
|
|
body: formData,
|
|
|
|
method: "PUT",
|
|
|
|
});
|
2023-11-02 16:45:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export const quizApi = {
|
2023-12-31 02:53:25 +00:00
|
|
|
create: createQuiz,
|
|
|
|
getList: getQuizList,
|
|
|
|
get: getQuiz,
|
|
|
|
edit: editQuiz,
|
|
|
|
copy: copyQuiz,
|
|
|
|
delete: deleteQuiz,
|
|
|
|
addImages: addQuizImages,
|
2023-11-02 16:45:28 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const defaultCreateQuizBody: CreateQuizRequest = {
|
2023-12-31 02:53:25 +00:00
|
|
|
fingerprinting: true,
|
|
|
|
repeatable: true,
|
|
|
|
note_prevented: true,
|
|
|
|
mail_notifications: false,
|
|
|
|
unique_answers: true,
|
|
|
|
name: "",
|
|
|
|
description: "",
|
|
|
|
config: JSON.stringify(defaultQuizConfig),
|
|
|
|
status: "stop",
|
|
|
|
limit: 0,
|
|
|
|
due_to: 0,
|
|
|
|
time_of_passing: 0,
|
|
|
|
pausable: false,
|
|
|
|
super: false,
|
|
|
|
group_id: 0,
|
2023-11-02 16:45:28 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const defaultGetQuizBody: GetQuizRequest = {
|
2023-12-31 02:53:25 +00:00
|
|
|
quiz_id: "string",
|
|
|
|
limit: 0,
|
|
|
|
page: 0,
|
|
|
|
need_config: true,
|
2023-11-02 16:45:28 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const defaultGetQuizListBody: GetQuizListRequest = {
|
2023-12-31 02:53:25 +00:00
|
|
|
limit: 100,
|
|
|
|
offset: 0,
|
2023-11-02 16:45:28 +00:00
|
|
|
};
|