feat(online): partage client - use cases, inbox cache et import local (ticket #66)
Ajoute l'adapter API distant de partage (infrastructure/remote/share_api.dart) et les use cases associés (application/use_cases.dart), avec cache d'inbox et import local des ressources partagées acceptées. Étend le modèle Drift (migration schemaVersion 11→12) et les entités du domaine en conséquence. flutter pub get OK, build_runner OK, dart format appliqué, analyze propre (mêmes infos préexistantes), 124/124 tests verts, build APK debug validé. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -14,6 +14,7 @@ abstract interface class AppDependencies {
|
||||
CloseWorkoutSessionUseCase get closeWorkoutSessionUseCase;
|
||||
WorkoutHistoryUseCases get workoutHistoryUseCases;
|
||||
SyncUseCases get syncUseCases;
|
||||
ShareUseCases get shareUseCases;
|
||||
}
|
||||
|
||||
final class AppBootstrap implements AppDependencies {
|
||||
@ -29,6 +30,7 @@ final class AppBootstrap implements AppDependencies {
|
||||
required this.closeWorkoutSessionUseCase,
|
||||
required this.workoutHistoryUseCases,
|
||||
required this.syncUseCases,
|
||||
required this.shareUseCases,
|
||||
required this.syncGateway,
|
||||
});
|
||||
|
||||
@ -53,6 +55,8 @@ final class AppBootstrap implements AppDependencies {
|
||||
final WorkoutHistoryUseCases workoutHistoryUseCases;
|
||||
@override
|
||||
final SyncUseCases syncUseCases;
|
||||
@override
|
||||
final ShareUseCases shareUseCases;
|
||||
final SyncGateway syncGateway;
|
||||
|
||||
static Future<AppBootstrap> create() async {
|
||||
@ -64,6 +68,10 @@ final class AppBootstrap implements AppDependencies {
|
||||
final syncMetadataRepository = DriftSyncMetadataRepository(database);
|
||||
final mappingRepository = DriftRemoteResourceMappingRepository(database);
|
||||
final localSyncChangeRepository = DriftLocalSyncChangeRepository(database);
|
||||
final shareInboxRepository = DriftShareInboxRepository(database);
|
||||
final pendingShareActionRepository = DriftPendingShareActionRepository(
|
||||
database,
|
||||
);
|
||||
final programRepository = DriftProgramRepository(database);
|
||||
final templateRepository = DriftWorkoutTemplateRepository(database);
|
||||
final activeSessionRepository = DriftActiveSessionRepository(database);
|
||||
@ -77,6 +85,9 @@ final class AppBootstrap implements AppDependencies {
|
||||
final remoteSyncApi = HttpRemoteSyncApi(
|
||||
HttpApiClient(baseUrl: Uri.parse(HttpApiClient.defaultBaseUrl)),
|
||||
);
|
||||
final remoteShareApi = HttpRemoteShareApi(
|
||||
HttpApiClient(baseUrl: Uri.parse(HttpApiClient.defaultBaseUrl)),
|
||||
);
|
||||
|
||||
return AppBootstrap._(
|
||||
database: database,
|
||||
@ -150,6 +161,17 @@ final class AppBootstrap implements AppDependencies {
|
||||
clock: clock,
|
||||
deviceId: originDeviceId,
|
||||
),
|
||||
shareUseCases: ShareUseCases(
|
||||
tokenStore: const SecureStorageAuthTokenStore(),
|
||||
remoteShareApi: remoteShareApi,
|
||||
inboxRepository: shareInboxRepository,
|
||||
pendingActionRepository: pendingShareActionRepository,
|
||||
localChanges: localSyncChangeRepository,
|
||||
programRepository: programRepository,
|
||||
templateRepository: templateRepository,
|
||||
clock: clock,
|
||||
ids: ids,
|
||||
),
|
||||
syncGateway: const NoOpSyncGateway(),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user