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; AuthRepositoryImpl({required AuthApi api, required TokenStorage tokenStorage}) : _api = api, _tokenStorage = tokenStorage; @override Future signupStart(SignupStartRequest request) { return _api.signupStart(request); } @override Future signupVerify(SignupVerifyRequest request) async { final response = await _api.signupVerify(request); await _tokenStorage.saveTokens( access: response.accessToken, refresh: response.refreshToken, ); return response; } @override Future signupResend(SignupResendRequest request) { return _api.signupResend(request); } @override Future login(LoginRequest request) async { final response = await _api.login(request); await _tokenStorage.saveTokens( access: response.accessToken, refresh: response.refreshToken, ); return response; } @override Future refresh(String refreshToken) async { final response = await _api.refresh( RefreshRequest(refreshToken: refreshToken), ); await _tokenStorage.saveTokens( access: response.accessToken, refresh: response.refreshToken, ); return response; } @override Future logout() async { final refreshToken = await _tokenStorage.getRefreshToken(); if (refreshToken != null) { await _api.logout(LogoutRequest(refreshToken: refreshToken)); } 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; } }