Files
Remever/lib/services/auth_service.dart
2025-03-03 20:59:42 +03:00

73 lines
1.8 KiB
Dart

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<bool> get isAuth async => await token != null;
@override
Future<String?> get token async {
final String? accessToken = await authSecStorage.read(
key: StorageKeys.accessToken,
);
return accessToken;
}
@override
Future<String?> login(String email) async {
try {
final Response<dynamic> result = await apiClient.post(
'/auth/email/send',
options: Options()..disableRetry = true,
data: <String, dynamic>{'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<bool> sendCode(String code, String uid) async {
try {
final Response<dynamic> result = await apiClient.post(
'/auth/code/login',
options: Options()..disableRetry = true,
data: <String, dynamic>{'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;
}
}
}