refactor(apps): 重构数据层目录结构并新增启动预热编排器

This commit is contained in:
zl-q
2026-03-29 20:26:30 +08:00
parent 33340de8f9
commit 4db9a13bfe
108 changed files with 1653 additions and 1320 deletions
@@ -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;
}
}