import 'package:baseproject/core/common/index.dart'; import 'package:baseproject/core/constants/index.dart'; import 'package:baseproject/core/extension/string_extension.dart'; import 'package:baseproject/features/repositories/hra_repository.dart'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; import 'package:injectable/injectable.dart'; @lazySingleton class UserUseCases { final HraRepository _hraRepository; UserUseCases(this._hraRepository); Future> loginAccount(LoginDto request) async { try { final result = await _hraRepository.accountLoginMobile(request); if (result.data == null || result.success == false) { return Left(result.message ?? 'Login failed'); } await saveToken(result.data?.token ?? '', refreshToken: result.data?.refreshToken ?? ''); await saveUserInfo(result.data?.userInfo); return Right(result.data!); } catch (ex) { return Left(ex.toString()); } } Future saveToken(String token, {String? refreshToken}) async { await LocalStoreManager.setString(StorageKey.tokenUser, token); if (refreshToken != null) { await LocalStoreManager.setString(StorageKey.refreshToken, refreshToken); } } Future saveUserInfo(UserInfoDto? userInfo) async { if (userInfo != null) { await LocalStoreManager.setObject(StorageKey.userInfo, userInfo.toJson()); } } UserInfoDto? getUserInfo() { final Map? temp = LocalStoreManager.getObject(StorageKey.userInfo); if (temp != null) return UserInfoDto.fromJson(temp); return null; } int getCurrentUserId() { return getUserInfo()?.id?.toInt() ?? 0; } Future clearData() async { await LocalStoreManager.remove(StorageKey.refreshToken); await LocalStoreManager.remove(StorageKey.tokenUser); await LocalStoreManager.remove(StorageKey.userInfo); } Future> getCaptcha() async { try { final result = await _hraRepository.accountCaptcha(); return Right(result); } catch (ex) { return Left(ex.toString()); } } Future> refreshToken() async { final refreshToken = LocalStoreManager.getString(StorageKey.refreshToken); if (refreshToken.isNullOrEmpty) { return const Left('Refresh token not found'); } try { final result = await _hraRepository.accountRefreshToken( RefreshTokenRequestDto(refreshToken: LocalStoreManager.getString(StorageKey.refreshToken))); if (result.data != null) { await saveToken(result.data?.token ?? '', refreshToken: result.data?.refreshToken ?? ''); } return Right(result.success ?? false); } catch (ex) { await clearData(); return Left(ex.toString()); } } Future> getUserInfoFromApi() async { try { final result = await _hraRepository.accountUserInfo(); await saveUserInfo(result); return Right(result); } catch (ex) { await clearData(); return Left(ex.toString()); } } Future tryRefreshToken() async { try { RefreshTokenRequestDto requestModel = RefreshTokenRequestDto(refreshToken: LocalStoreManager.getString(StorageKey.refreshToken)); final RefreshTokenResponseDtoApiResponse? token = await HraRepository(Dio(), baseUrl: ApiPath.hra).accountRefreshToken(requestModel); if (token != null) { await saveToken(token.data?.token ?? '', refreshToken: token.data?.refreshToken ?? ''); } return token != null; } catch (e) { return false; } } }