import 'package:social_app/core/storage/token_storage.dart'; import 'auth_api.dart'; import 'auth_repository.dart'; import 'models/signup_request.dart'; import 'models/login_request.dart'; import 'models/auth_response.dart'; class AuthRepositoryImpl implements AuthRepository { final AuthApi _api; final TokenStorage _tokenStorage; final Future Function()? _onLogout; AuthRepositoryImpl({ required AuthApi api, required TokenStorage tokenStorage, Future Function()? onLogout, }) : _api = api, _tokenStorage = tokenStorage, _onLogout = onLogout; @override Future sendOtp(String phone) { return _api.sendOtp(OtpSendRequest(phone: phone)); } @override Future createPhoneSession({ required String phone, required String token, }) async { final response = await _api.createPhoneSession( LoginRequest(phone: phone, token: token), ); await _tokenStorage.saveTokens( access: response.accessToken, refresh: response.refreshToken, ); return response; } @override Future refreshSession(String refreshToken) async { final response = await _api.refreshSession( RefreshRequest(refreshToken: refreshToken), ); await _tokenStorage.saveTokens( access: response.accessToken, refresh: response.refreshToken, ); return response; } @override Future deleteSession() async { final refreshToken = await _tokenStorage.getRefreshToken(); if (refreshToken != null) { try { await _api.deleteSession(LogoutRequest(refreshToken: refreshToken)); } catch (_) { // ignore API errors during logout } } await clearSessionLocalOnly(); } @override Future clearSessionLocalOnly() async { if (_onLogout != null) { await _onLogout(); } await _tokenStorage.clear(); } @override Future getAccessToken() => _tokenStorage.getAccessToken(); @override Future getRefreshToken() => _tokenStorage.getRefreshToken(); @override Future isAuthenticated() async { final token = await _tokenStorage.getAccessToken(); return token != null; } }