78 lines
2.7 KiB
Dart
78 lines
2.7 KiB
Dart
import 'package:dio/dio.dart';
|
|
import '../../core/error/exceptions.dart';
|
|
import '../../core/network/api_client.dart';
|
|
import '../dto/login_dto.dart';
|
|
import '../dto/login_response_dto.dart';
|
|
|
|
abstract class AuthRemoteDataSource {
|
|
Future<LoginResponseDto> login(LoginDto dto);
|
|
}
|
|
|
|
class AuthRemoteDataSourceImpl implements AuthRemoteDataSource {
|
|
final ApiClient apiClient;
|
|
|
|
AuthRemoteDataSourceImpl({required this.apiClient});
|
|
|
|
@override
|
|
Future<LoginResponseDto> login(LoginDto dto) async {
|
|
try {
|
|
final response = await apiClient.post(
|
|
'/Auth/login',
|
|
data: dto.toJson(),
|
|
);
|
|
|
|
if (response.statusCode == 200 || response.statusCode == 201) {
|
|
final responseData = response.data;
|
|
|
|
if (responseData is Map<String, dynamic>) {
|
|
return LoginResponseDto.fromJson(responseData);
|
|
} else {
|
|
throw ServerException(
|
|
message: 'استجابة غير صحيحة من الخادم',
|
|
statusCode: response.statusCode,
|
|
);
|
|
}
|
|
} else {
|
|
throw ServerException(
|
|
message: 'فشل تسجيل الدخول',
|
|
statusCode: response.statusCode,
|
|
);
|
|
}
|
|
} on DioException catch (e) {
|
|
if (e.type == DioExceptionType.connectionTimeout ||
|
|
e.type == DioExceptionType.receiveTimeout) {
|
|
throw NetworkException(message: 'انتهت مهلة الاتصال');
|
|
} else if (e.type == DioExceptionType.connectionError) {
|
|
throw NetworkException(message: 'لا يوجد اتصال بالانترنيت');
|
|
} else if (e.response?.statusCode == 500) {
|
|
throw ServerException(message: 'خطأ في الخادم يرجى المحاولة لاحقا');
|
|
} else if (e.response != null) {
|
|
final message = e.response?.data?['message'] ??
|
|
e.response?.data?['error'] ??
|
|
'فشل تسجيل الدخول';
|
|
|
|
// Check for invalid credentials
|
|
final customMessage =
|
|
message.toString().toLowerCase().contains('invalid') ||
|
|
message.toString().toLowerCase().contains('incorrect')
|
|
? 'رقم الهاتف أو كلمة المرور غير صحيحة'
|
|
: message.toString().toLowerCase().contains('not found')
|
|
? 'المستخدم غير موجود'
|
|
: message;
|
|
|
|
throw ServerException(
|
|
message: customMessage,
|
|
statusCode: e.response?.statusCode,
|
|
);
|
|
} else {
|
|
throw NetworkException(message: 'خطأ في الانترنيت يرجى المحاولة لاحقا');
|
|
}
|
|
} catch (e) {
|
|
if (e is ServerException || e is NetworkException) {
|
|
rethrow;
|
|
}
|
|
throw ServerException(message: 'خطأ غير متوقع');
|
|
}
|
|
}
|
|
}
|