refactor(apps): 重构数据层目录结构并新增启动预热编排器
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
import '../models/auth_response.dart';
|
||||
|
||||
abstract class AuthRepository {
|
||||
Future<void> sendOtp(String phone);
|
||||
Future<AuthResponse> createPhoneSession({
|
||||
required String phone,
|
||||
required String token,
|
||||
});
|
||||
Future<AuthResponse> refreshSession(String refreshToken);
|
||||
Future<void> deleteSession();
|
||||
Future<void> clearSessionLocalOnly();
|
||||
Future<String?> getAccessToken();
|
||||
Future<String?> getRefreshToken();
|
||||
Future<bool> isAuthenticated();
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
import 'package:social_app/data/storage/token_storage.dart';
|
||||
import '../apis/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<void> Function()? _onLogout;
|
||||
|
||||
AuthRepositoryImpl({
|
||||
required AuthApi api,
|
||||
required TokenStorage tokenStorage,
|
||||
Future<void> Function()? onLogout,
|
||||
}) : _api = api,
|
||||
_tokenStorage = tokenStorage,
|
||||
_onLogout = onLogout;
|
||||
|
||||
@override
|
||||
Future<void> sendOtp(String phone) {
|
||||
return _api.sendOtp(OtpSendRequest(phone: phone));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<AuthResponse> 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<AuthResponse> 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<void> 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<void> clearSessionLocalOnly() async {
|
||||
if (_onLogout != null) {
|
||||
await _onLogout();
|
||||
}
|
||||
await _tokenStorage.clear();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<String?> getAccessToken() => _tokenStorage.getAccessToken();
|
||||
|
||||
@override
|
||||
Future<String?> getRefreshToken() => _tokenStorage.getRefreshToken();
|
||||
|
||||
@override
|
||||
Future<bool> isAuthenticated() async {
|
||||
final token = await _tokenStorage.getAccessToken();
|
||||
return token != null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user