TIF_E41211115_Genso_quiz_app/lib/data/services/quiz_service.dart

95 lines
3.0 KiB
Dart

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/question_listings_model.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<ApiClient>().dio;
super.onInit();
}
Future<bool> 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<List<QuizData>> userQuiz(String userId, int page) async {
try {
final response = await _dio.get("${APIEndpoint.userQuiz}/$userId?page=$page");
final parsedResponse = BaseResponseModel<List<QuizData>>.fromJson(
response.data,
(data) => (data as List).map((e) => QuizData.fromJson(e as Map<String, dynamic>)).toList(),
);
return parsedResponse.data ?? [];
} catch (e) {
logC.e("Error fetching user quizzes: $e");
return [];
}
}
Future<BaseResponseModel<List<QuizListingModel>>?> recomendationQuiz() async {
try {
final response = await _dio.get(APIEndpoint.quizRecomendation);
if (response.statusCode == 200) {
final parsedResponse = BaseResponseModel<List<QuizListingModel>>.fromJson(
response.data,
(data) => (data as List).map((e) => QuizListingModel.fromJson(e as Map<String, dynamic>)).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<BaseResponseModel<List<QuizListingModel>>?> 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<List<QuizListingModel>>.fromJson(
response.data,
(data) => (data as List).map((e) => QuizListingModel.fromJson(e as Map<String, dynamic>)).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;
}
}
}