75 lines
2.3 KiB
Dart
75 lines
2.3 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/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<ApiClient>().dio;
|
|
super.onInit();
|
|
}
|
|
|
|
Future<bool> 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<LoginResponseModel> loginWithEmail(LoginRequestModel request) async {
|
|
try {
|
|
final data = request.toJson();
|
|
final response = await dio.post(APIEndpoint.login, data: data);
|
|
|
|
final baseResponse = BaseResponseModel<LoginResponseModel>.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<LoginResponseModel> loginWithGoogle(String idToken) async {
|
|
try {
|
|
final response = await dio.post(
|
|
APIEndpoint.loginGoogle,
|
|
data: {"token_id": idToken},
|
|
);
|
|
|
|
final baseResponse = BaseResponseModel<LoginResponseModel>.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);
|
|
}
|
|
}
|
|
}
|