feat(online): session compte, stockage sécurisé et adapter API (ticket #64)
Ajoute l'adapter API distant (infrastructure/remote/auth_api.dart, http_api_client.dart) et le stockage sécurisé du token d'auth (infrastructure/security/secure_storage_auth_token_store.dart), câblés dans app_bootstrap.dart. Étend le modèle Drift (migration schemaVersion 9→10) et la couche application (ports, use cases, entités) pour la session de compte. flutter pub get OK (ajout http, flutter_secure_storage), build_runner OK, dart format appliqué, analyze propre (mêmes infos préexistantes), 109/109 tests verts, build APK debug validé. Premier ticket du chantier "Ajouter les features serveur au client" (#63). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -1,7 +1,10 @@
|
||||
import '../infrastructure/local/local.dart';
|
||||
import '../infrastructure/remote/remote.dart';
|
||||
import '../infrastructure/security/security.dart';
|
||||
import 'application.dart';
|
||||
|
||||
abstract interface class AppDependencies {
|
||||
AuthUseCases get authUseCases;
|
||||
ExerciseUseCases get exerciseUseCases;
|
||||
MediaUseCases get mediaUseCases;
|
||||
ProgramUseCases get programUseCases;
|
||||
@ -15,6 +18,7 @@ abstract interface class AppDependencies {
|
||||
final class AppBootstrap implements AppDependencies {
|
||||
AppBootstrap._({
|
||||
required this.database,
|
||||
required this.authUseCases,
|
||||
required this.exerciseUseCases,
|
||||
required this.mediaUseCases,
|
||||
required this.programUseCases,
|
||||
@ -28,6 +32,8 @@ final class AppBootstrap implements AppDependencies {
|
||||
|
||||
final AppDatabase database;
|
||||
@override
|
||||
final AuthUseCases authUseCases;
|
||||
@override
|
||||
final ExerciseUseCases exerciseUseCases;
|
||||
@override
|
||||
final MediaUseCases mediaUseCases;
|
||||
@ -50,6 +56,7 @@ final class AppBootstrap implements AppDependencies {
|
||||
await database.customSelect('SELECT 1').get();
|
||||
final exerciseRepository = DriftExerciseRepository(database);
|
||||
final mediaRepository = DriftMediaAssetRepository(database);
|
||||
final onlineAccountRepository = DriftOnlineAccountRepository(database);
|
||||
final programRepository = DriftProgramRepository(database);
|
||||
final templateRepository = DriftWorkoutTemplateRepository(database);
|
||||
final activeSessionRepository = DriftActiveSessionRepository(database);
|
||||
@ -57,9 +64,19 @@ final class AppBootstrap implements AppDependencies {
|
||||
final ids = LocalIdGenerator();
|
||||
const clock = SystemClock();
|
||||
const originDeviceId = 'local-device';
|
||||
final remoteAuthApi = HttpRemoteAuthApi(
|
||||
HttpApiClient(baseUrl: Uri.parse(HttpApiClient.defaultBaseUrl)),
|
||||
);
|
||||
|
||||
return AppBootstrap._(
|
||||
database: database,
|
||||
authUseCases: AuthUseCases(
|
||||
tokenStore: const SecureStorageAuthTokenStore(),
|
||||
accountRepository: onlineAccountRepository,
|
||||
remoteAuthApi: remoteAuthApi,
|
||||
clock: clock,
|
||||
ids: ids,
|
||||
),
|
||||
exerciseUseCases: ExerciseUseCases(
|
||||
repository: exerciseRepository,
|
||||
programRepository: programRepository,
|
||||
|
||||
Reference in New Issue
Block a user