import { makeRequest } from "@frontend/kitui"; import { defaultQuizConfig } from "@model/quizSettings"; 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"; import { RawQuiz } from "model/quiz/quiz"; const baseUrl = process.env.NODE_ENV === "production" ? "/squiz" : "https://squiz.pena.digital/squiz"; const imagesUrl = process.env.NODE_ENV === "production" ? "/squizstorer" : "https://squiz.pena.digital/squizstorer"; function createQuiz(body?: Partial) { return makeRequest({ url: `${baseUrl}/quiz/create`, body: { ...defaultCreateQuizBody, ...body }, method: "POST", }); } async function getQuizList(body?: Partial) { const response = await makeRequest({ url: `${baseUrl}/quiz/getList`, body: { ...defaultGetQuizListBody, ...body }, method: "POST", }); return response.items; } function getQuiz(body?: Partial) { return makeRequest({ url: `${baseUrl}/quiz/get`, body: { ...defaultGetQuizBody, ...body }, method: "GET", }); } async function editQuiz(body: EditQuizRequest, signal?: AbortSignal) { return makeRequest({ url: `${baseUrl}/quiz/edit`, body, method: "PATCH", signal, }); } function copyQuiz(id: number) { return makeRequest({ url: `${baseUrl}/quiz/copy`, body: { id }, method: "POST", }); } function deleteQuiz(id: number) { return makeRequest({ url: `${baseUrl}/quiz/delete`, body: { id }, method: "DELETE", }); } function addQuizImages(quizId: number, image: Blob) { const formData = new FormData(); formData.append("quiz", quizId.toString()); formData.append("image", image); return makeRequest({ url: `${imagesUrl}/quiz/putImages`, body: formData, method: "PUT", }); } export const quizApi = { create: createQuiz, getList: getQuizList, get: getQuiz, edit: editQuiz, copy: copyQuiz, delete: deleteQuiz, addImages: addQuizImages, }; const defaultCreateQuizBody: CreateQuizRequest = { "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, }; const defaultGetQuizBody: GetQuizRequest = { "quiz_id": "string", "limit": 0, "page": 0, "need_config": true, }; const defaultGetQuizListBody: GetQuizListRequest = { "limit": 100, "offset": 0, };