Files
2023-11-06 18:11:24 +05:45

47 lines
1.3 KiB
Dart

import 'package:flutter_project/shared/data/remote/remote.dart';
import 'package:flutter_project/shared/domain/models/either.dart';
import 'package:flutter_project/shared/domain/models/models.dart';
import 'package:flutter_project/shared/exceptions/http_exception.dart';
abstract class LoginUserDataSource {
Future<Either<AppException, User>> loginUser({required User user});
}
class LoginUserRemoteDataSource implements LoginUserDataSource {
final NetworkService networkService;
LoginUserRemoteDataSource(this.networkService);
@override
Future<Either<AppException, User>> loginUser({required User user}) async {
try {
final eitherType = await networkService.post(
'/auth/login',
data: user.toJson(),
);
return eitherType.fold(
(exception) {
return Left(exception);
},
(response) {
final user = User.fromJson(response.data);
// update the token for requests
networkService.updateHeader(
{'Authorization': user.token},
);
return Right(user);
},
);
} catch (e) {
return Left(
AppException(
message: 'Unknown error occurred',
statusCode: 1,
identifier: '${e.toString()}\nLoginUserRemoteDataSource.loginUser',
),
);
}
}
}