import 'package:dio/dio.dart'; import 'package:get/get.dart'; import 'package:quiz_app/core/endpoint/api_endpoint.dart'; import 'package:quiz_app/core/utils/logger.dart'; import 'package:quiz_app/data/models/base/base_model.dart'; import 'package:quiz_app/data/models/quiz/library_quiz_model.dart'; import 'package:quiz_app/data/models/quiz/question_create_request.dart'; import 'package:quiz_app/data/models/quiz/quiz_listing_model.dart'; import 'package:quiz_app/data/providers/dio_client.dart'; class QuizService extends GetxService { late final Dio _dio; @override void onInit() { _dio = Get.find().dio; super.onInit(); } Future createQuiz(QuizCreateRequestModel request) async { try { final response = await _dio.post( APIEndpoint.quiz, data: request.toJson(), ); if (response.statusCode == 201) { return true; } else { throw Exception("Quiz creation failed"); } } catch (e) { logC.e("Quiz creation error: $e"); throw Exception("Quiz creation error: $e"); } } Future>?> userQuiz(String userId, int page) async { try { final response = await _dio.get("${APIEndpoint.userQuiz}/$userId?page=$page"); if (response.statusCode == 200) { final parsedResponse = BaseResponseModel>.fromJson( response.data, (data) => (data as List).map((e) => QuizListingModel.fromJson(e as Map)).toList(), ); return parsedResponse; } else { logC.e("Failed to fetch recommendation quizzes. Status: ${response.statusCode}"); return null; } } catch (e) { logC.e("Error fetching user quizzes: $e"); return null; } } Future>?> recomendationQuiz({int page = 1, int amount = 3}) async { try { final response = await _dio.get("${APIEndpoint.quizRecomendation}?page=$page&limit=$amount"); if (response.statusCode == 200) { final parsedResponse = BaseResponseModel>.fromJson( response.data, (data) => (data as List).map((e) => QuizListingModel.fromJson(e as Map)).toList(), ); return parsedResponse; } else { logC.e("Failed to fetch recommendation quizzes. Status: ${response.statusCode}"); return null; } } catch (e) { logC.e("Error fetching recommendation quizzes: $e"); return null; } } Future>?> searchQuiz(String keyword) async { try { final response = await _dio.get("${APIEndpoint.quizSearch}?keyword=$keyword&page=1&limit=10"); if (response.statusCode == 200) { final parsedResponse = BaseResponseModel>.fromJson( response.data, (data) => (data as List).map((e) => QuizListingModel.fromJson(e as Map)).toList(), ); return parsedResponse; } else { logC.e("Failed to fetch search quizzes. Status: ${response.statusCode}"); return null; } } catch (e) { logC.e("Error fetching search quizzes: $e"); return null; } } Future?> getQuizById(String quizId) async { try { final response = await _dio.get("${APIEndpoint.quiz}/$quizId"); if (response.statusCode == 200) { final parsedResponse = BaseResponseModel.fromJson( response.data, (data) => QuizData.fromJson(data), ); return parsedResponse; } else { logC.e("Failed to fetch quiz by id. Status: ${response.statusCode}"); return null; } } catch (e, stacktrace) { logC.e("Error fetching quiz by id $e", stackTrace: stacktrace); return null; } } }