From c89d5e5a24de93ddacde5e6927867e28778950e1 Mon Sep 17 00:00:00 2001 From: OluRemiFour Date: Thu, 26 Feb 2026 12:35:41 +0100 Subject: [PATCH] set up the API client and hook for submitting puzzle answers according to your requirements --- frontend/hooks/useSubmitAnswer.ts | 41 +++++++++++++++++++++++++++++++ frontend/lib/api/progressApi.ts | 21 ++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 frontend/hooks/useSubmitAnswer.ts create mode 100644 frontend/lib/api/progressApi.ts diff --git a/frontend/hooks/useSubmitAnswer.ts b/frontend/hooks/useSubmitAnswer.ts new file mode 100644 index 0000000..6688dc0 --- /dev/null +++ b/frontend/hooks/useSubmitAnswer.ts @@ -0,0 +1,41 @@ +import { useState, useCallback } from 'react'; +import { submitAnswer, SubmitAnswerDto, SubmitAnswerResponse } from '../lib/api/progressApi'; + +interface UseSubmitAnswerResult { + submit: (dto: SubmitAnswerDto) => Promise; + isLoading: boolean; + error: string | null; + clearError: () => void; +} + +export function useSubmitAnswer(): UseSubmitAnswerResult { + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(null); + + const submit = useCallback(async (dto: SubmitAnswerDto) => { + setIsLoading(true); + setError(null); + + try { + const response = await submitAnswer(dto); + return response; + } catch (err: any) { + const message = err.response?.data?.message || err.message || 'An unexpected error occurred while submitting the answer'; + setError(message); + throw err; + } finally { + setIsLoading(false); + } + }, []); + + const clearError = useCallback(() => { + setError(null); + }, []); + + return { + submit, + isLoading, + error, + clearError, + }; +} diff --git a/frontend/lib/api/progressApi.ts b/frontend/lib/api/progressApi.ts new file mode 100644 index 0000000..e0ae05b --- /dev/null +++ b/frontend/lib/api/progressApi.ts @@ -0,0 +1,21 @@ +import api from './client'; + +export interface SubmitAnswerDto { + userId: string; + puzzleId: string; + answer: string; + timeSpent?: number; +} + +export interface SubmitAnswerResponse { + correct: boolean; + correctAnswer?: string; + explanation?: string; + xpEarned: number; + newTotalXp: number; +} + +export async function submitAnswer(dto: SubmitAnswerDto): Promise { + const response = await api.post('/progress/submit', dto); + return response.data; +}