From 6e52f5dab28bb3aa37384adaa490ddf3e1db02c4 Mon Sep 17 00:00:00 2001 From: abiyasa05 Date: Wed, 9 Oct 2024 11:47:10 +0700 Subject: [PATCH] create: add file for assessment queries --- .../queries/assessmentQueries.ts | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 apps/frontend/src/modules/assessmentManagement/queries/assessmentQueries.ts diff --git a/apps/frontend/src/modules/assessmentManagement/queries/assessmentQueries.ts b/apps/frontend/src/modules/assessmentManagement/queries/assessmentQueries.ts new file mode 100644 index 0000000..652c5a0 --- /dev/null +++ b/apps/frontend/src/modules/assessmentManagement/queries/assessmentQueries.ts @@ -0,0 +1,120 @@ +import client from "@/honoClient"; +import fetchRPC from "@/utils/fetchRPC"; +import { queryOptions } from "@tanstack/react-query"; +import { InferRequestType } from "hono"; + +// Query untuk mendapatkan skor assessment saat ini +export const getCurrentAssessmentScoreQueryOptions = (assessmentId: string) => + queryOptions({ + queryKey: ["assessment", { assessmentId }], + queryFn: () => + fetchRPC( + client.assessments.getCurrentAssessmentScore.$get({ + query: { + assessmentId, + }, + }) + ), + }); + +export const fetchAspects = async () => { + return await fetchRPC( + client.assessments.aspect.$get({ + query: {} + }) + ); +}; + +// Query untuk mendapatkan semua pertanyaan berdasarkan halaman dan limit +export const getQuestionsAllQueryOptions = (page: number, limit: number, q?: string) => + queryOptions({ + queryKey: ["assessment", { page, limit, q }], + queryFn: () => + fetchRPC( + client.assessments.getAllQuestions.$get({ + query: { + limit: String(limit), + page: String(page), + q: q || "", + }, + }) + ), + }); + +// Query untuk mendapatkan jawaban berdasarkan assessment ID +export const getAnswersQueryOptions = (assessmentId: string, page: number, limit: number, q?: string) => + queryOptions({ + queryKey: ["assessment", { assessmentId, page, limit, q }], + queryFn: () => + fetchRPC( + client.assessments.getAnswers.$get({ + query: { + assessmentId, + limit: String(limit), + page: String(page), + q: q || "", + }, + }) + ), + }); + +// Query untuk toggle flag jawaban berdasarkan questionId +export const toggleFlagAnswer = async (questionId: string) => { + return await fetchRPC( + client.assessments[":questionId"].toggleFlag.$patch({ + param: { questionId } + }) + ); +}; + +// Opsional: Jika Anda ingin menggunakan react-query untuk toggleFlag +export const toggleFlagAnswerMutationOptions = (questionId: string) => ({ + mutationFn: () => toggleFlagAnswer(questionId), +}); + +// Di file queries (sesuaikan tipe yang diperlukan untuk submitAnswer) +export const submitAnswer = async ( + form: { + optionId: string; + assessmentId: string; + validationInformation: string; + } +) => { + return await fetchRPC( + client.assessments.submitAnswer.$post({ + json: form, + }) + ); +}; + +// Opsional: Jika Anda ingin menggunakan react-query untuk submitAnswer +export const submitAnswerMutationOptions = () => ({ + mutationFn: submitAnswer, +}); + +// Query untuk mendapatkan rata-rata skor berdasarkan aspectId dan assessmentId +export const getAverageScoreQueryOptions = (assessmentId: string) => + queryOptions({ + queryKey: ["averageScore", { assessmentId }], + queryFn: () => + fetchRPC( + client.assessments["average-score"].aspects.assessments[":assessmentId"].$get({ + param: { + assessmentId, + }, + }) + ), + }); + +export const getAverageScoreSubAspectQueryOptions = (assessmentId: string) => + queryOptions({ + queryKey: ["averageScoreSubAspects", { assessmentId }], + queryFn: () => + fetchRPC( + client.assessments["average-score"]["sub-aspects"].assessments[":assessmentId"].$get({ + param: { + assessmentId, + }, + }) + ), + }); \ No newline at end of file