import 'dart:developer'; import 'package:dartz/dartz.dart'; import 'package:injectable/injectable.dart'; import '../../../domain/wallet/wallet.dart'; import '../datasources/device_data_provider.dart'; @Injectable(as: IDeviceRepository) class DeviceRepository implements IDeviceRepository { final DeviceLocalDataProvider _localDataProvider; final DeviceRemoteDataProvider _remoteDataProvider; final String _logName = 'DeviceRepository'; DeviceRepository(this._localDataProvider, this._remoteDataProvider); @override Future> register({ required String fcmToken, required String platform, required String appVersion, }) async { try { final result = await _remoteDataProvider.register( deviceId: await _localDataProvider.deviceId(), fcmToken: fcmToken, platform: platform, appVersion: appVersion, ); if (result.hasError) return left(result.error!); await _localDataProvider.setRegistered(true); return right(unit); } catch (e, s) { log('register', name: _logName, error: e, stackTrace: s); return left(const WalletFailure.unexpectedError()); } } @override Future> unregister() async { try { if (!await _localDataProvider.isRegistered()) return right(unit); final result = await _remoteDataProvider.unregister( deviceId: await _localDataProvider.deviceId(), ); if (result.hasError) return left(result.error!); await _localDataProvider.setRegistered(false); return right(unit); } catch (e, s) { log('unregister', name: _logName, error: e, stackTrace: s); return left(const WalletFailure.unexpectedError()); } } }