import 'package:dio/dio.dart'; import 'package:dio_smart_retry/dio_smart_retry.dart'; import 'package:injectable/injectable.dart'; import 'package:remever/common/resources.dart'; import 'package:remever/common/services/api_client.dart'; import 'package:remever/common/storage.dart'; import 'package:remever/common/typedef.dart'; import 'package:remever/services/auth_interface.dart'; /// /// Сервис авторизации /// @Singleton(as: AuthInterface) final class AuthService implements AuthInterface { @override Future get isAuth async => await token != null; @override Future get token async { final String? accessToken = await authSecStorage.read( key: StorageKeys.accessToken, ); return accessToken; } @override Future login(String email) async { try { final Response result = await apiClient.post( '/auth/email/send', options: Options()..disableRetry = true, data: {'email': email.toLowerCase()}, ); final Json response = Json.from(result.data); if (response['success'] == false) return null; return response['result']['authUid']; } catch (e) { return null; } } @override Future sendCode(String code, String uid) async { try { final Response result = await apiClient.post( '/auth/code/login', options: Options()..disableRetry = true, data: {'authUid': uid, 'confirmCode': code}, ); final Json response = Json.from(result.data); final bool success = response['success'] ?? false; if (success) { await authSecStorage.write( key: StorageKeys.accessToken, value: response['result']['token'], ); } return success; } catch (e) { return false; } } }