mirror of
https://github.com/Uuttssaavv/flutter-clean-architecture-riverpod.git
synced 2025-08-26 10:35:38 +08:00
47 lines
1.3 KiB
Dart
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',
|
|
),
|
|
);
|
|
}
|
|
}
|
|
}
|