cargo66/lib/data/repositories/user_repository_impl.dart

119 lines
3.0 KiB
Dart
Raw Normal View History

2024-07-23 06:37:42 +00:00
import 'package:dartz/dartz.dart';
import '../../core/core.dart';
import '../../domain/domain.dart';
2024-08-07 13:56:12 +00:00
import '../data.dart';
2024-07-23 06:37:42 +00:00
class UserRepositoryImpl implements UserRepository {
final UserRemoteDataSource remoteDataSource;
final UserLocalDataSource localDataSource;
final NetworkInfo networkInfo;
UserRepositoryImpl({
required this.remoteDataSource,
required this.localDataSource,
required this.networkInfo,
});
@override
2024-08-07 13:56:12 +00:00
Future<Either<Failure, String>> signIn(params) async {
if (await networkInfo.isConnected) {
try {
2024-09-10 05:56:37 +00:00
/// login
2024-08-07 13:56:12 +00:00
final token = await remoteDataSource.signIn(params);
2024-08-08 05:40:30 +00:00
await localDataSource.saveToken(token);
2024-09-10 05:56:37 +00:00
/// get FB token
final String? fcmToken = await fcmFunctions.getFCMToken();
if (fcmToken != null) {
await remoteDataSource.registerFBToken(token, fcmToken);
}
2024-08-07 13:56:12 +00:00
return Right(token);
} on Failure catch (failure) {
return Left(failure);
}
} else {
return Left(NetworkFailure());
}
2024-07-23 06:37:42 +00:00
}
2024-09-12 10:27:18 +00:00
@override
Future<Either<Failure, int>> signUp(params) async {
if (await networkInfo.isConnected) {
try {
/// register
final code = await remoteDataSource.signUp(params);
return Right(code);
} on Failure catch (failure) {
return Left(failure);
}
} else {
return Left(NetworkFailure());
}
}
2024-07-23 06:37:42 +00:00
@override
Future<Either<Failure, User>> getCachedUser() async {
try {
final user = await localDataSource.getUser();
return Right(user);
} on CacheFailure {
return Left(CacheFailure());
2024-08-28 12:03:03 +00:00
} catch (error) {
return Left(ExceptionFailure());
2024-07-23 06:37:42 +00:00
}
}
@override
Future<Either<Failure, NoParams>> signOut() async {
try {
await localDataSource.clearCache();
return Right(NoParams());
} on CacheFailure {
return Left(CacheFailure());
2024-08-28 12:03:03 +00:00
} catch (error) {
return Left(ExceptionFailure());
2024-07-23 06:37:42 +00:00
}
}
2024-09-12 10:27:18 +00:00
@override
Future<Either<Failure, int>> deleteAccount() async {
try {
final String token = await localDataSource.getToken();
final code = await remoteDataSource.deleteAccount(token);
if (code == 204) {
await localDataSource.clearCache();
}
return Right(code);
} on CacheFailure {
return Left(CacheFailure());
} catch (error) {
return Left(ExceptionFailure());
}
}
2024-08-07 13:56:12 +00:00
@override
Future<Either<Failure, User>> getRemoteUser() async {
if (!await networkInfo.isConnected) {
2024-07-23 06:37:42 +00:00
return Left(NetworkFailure());
}
2024-08-07 13:56:12 +00:00
if (!await localDataSource.isTokenAvailable()) {
return Left(AuthenticationFailure());
}
try {
final String token = await localDataSource.getToken();
final user = await remoteDataSource.getUser(token);
await localDataSource.saveUser(UserModel.fromUser(user));
return Right(user);
} on Failure catch (failure) {
return Left(failure);
2024-08-28 12:03:03 +00:00
} catch (error) {
return Left(ExceptionFailure());
2024-08-07 13:56:12 +00:00
}
2024-07-23 06:37:42 +00:00
}
}