import 'package:dio/dio.dart'; import 'package:get/get.dart'; import 'package:quiz_app/core/endpoint/api_endpoint.dart'; import 'package:quiz_app/data/models/base/base_model.dart'; import 'package:quiz_app/data/models/login/login_request_model.dart'; import 'package:quiz_app/data/models/login/login_response_model.dart'; import 'package:quiz_app/data/models/register/register_request.dart'; import 'package:quiz_app/data/providers/dio_client.dart'; class AuthService extends GetxService { late final Dio dio; @override void onInit() { dio = Get.find().dio; super.onInit(); } Future register(RegisterRequestModel request) async { try { final response = await dio.post( APIEndpoint.register, data: request.toJson(), ); return response.statusCode == 200; } on DioException catch (e) { if (e.response?.statusCode == 409) { // Status 409 = Conflict = User already exists throw Exception("Email sudah dipakai"); } // Other Dio errors final errorMessage = e.response?.data['message'] ?? "Pendaftaran gagal"; throw Exception(errorMessage); } catch (e) { throw Exception("Terjadi kesalahan saat mendaftar"); } } Future loginWithEmail(LoginRequestModel request) async { try { final data = request.toJson(); final response = await dio.post(APIEndpoint.login, data: data); final baseResponse = BaseResponseModel.fromJson( response.data, (json) => LoginResponseModel.fromJson(json), ); return baseResponse.data!; } on DioException catch (e) { final errorMessage = e.response?.data['message'] ?? "Login gagal"; throw Exception(errorMessage); } } Future loginWithGoogle(String idToken) async { try { final response = await dio.post( APIEndpoint.loginGoogle, data: {"token_id": idToken}, ); final baseResponse = BaseResponseModel.fromJson( response.data, (json) => LoginResponseModel.fromJson(json), ); return baseResponse.data!; } on DioException catch (e) { final errorMessage = e.response?.data['message'] ?? "Login Google gagal"; throw Exception(errorMessage); } } }