82 lines
3.2 KiB
Dart
82 lines
3.2 KiB
Dart
import 'package:live_recorder_mobile/core/network/api_client.dart';
|
|
import 'package:live_recorder_mobile/core/persistence/session_storage.dart';
|
|
import 'package:live_recorder_mobile/features/live_recorder/data/repositories/auth_repository.dart';
|
|
import 'package:live_recorder_mobile/features/live_recorder/data/repositories/live_rooms_repository.dart';
|
|
import 'package:live_recorder_mobile/features/live_recorder/data/repositories/logs_repository.dart';
|
|
import 'package:live_recorder_mobile/features/live_recorder/data/repositories/media_repository.dart';
|
|
import 'package:live_recorder_mobile/features/live_recorder/data/repositories/recovery_repository.dart';
|
|
import 'package:live_recorder_mobile/features/live_recorder/data/repositories/recordings_repository.dart';
|
|
import 'package:live_recorder_mobile/features/live_recorder/data/repositories/settings_repository.dart';
|
|
import 'package:live_recorder_mobile/features/live_recorder/presentation/controllers/app_session_controller.dart';
|
|
|
|
abstract interface class AppDependencyBundle {
|
|
SessionControllerHandle get sessionController;
|
|
void dispose();
|
|
}
|
|
|
|
class AppDependencies implements AppDependencyBundle {
|
|
AppDependencies._({
|
|
required this.backendBaseUrl,
|
|
required this.apiClient,
|
|
required this.sessionStorage,
|
|
required this.authRepository,
|
|
required this.liveRoomsRepository,
|
|
required this.recordingsRepository,
|
|
required this.recoveryRepository,
|
|
required this.settingsRepository,
|
|
required this.logsRepository,
|
|
required this.mediaRepository,
|
|
required this.sessionController,
|
|
});
|
|
|
|
factory AppDependencies.create({
|
|
required String baseUrl,
|
|
}) {
|
|
late AppSessionController sessionController;
|
|
final sessionStorage = SessionStorage();
|
|
final apiClient = ApiClient(
|
|
baseUrl: baseUrl,
|
|
tokenProvider: () => sessionController.token,
|
|
onUnauthorized: () async => sessionController.handleUnauthorized(),
|
|
);
|
|
final authRepository = AuthRepository(apiClient);
|
|
sessionController = AppSessionController(
|
|
authRepository: authRepository,
|
|
sessionStorage: sessionStorage,
|
|
);
|
|
|
|
return AppDependencies._(
|
|
backendBaseUrl: baseUrl,
|
|
apiClient: apiClient,
|
|
sessionStorage: sessionStorage,
|
|
authRepository: authRepository,
|
|
liveRoomsRepository: LiveRoomsRepository(apiClient),
|
|
recordingsRepository: RecordingsRepository(apiClient),
|
|
recoveryRepository: RecoveryRepository(apiClient),
|
|
settingsRepository: SettingsRepository(apiClient),
|
|
logsRepository: LogsRepository(apiClient),
|
|
mediaRepository: MediaRepository(apiClient),
|
|
sessionController: sessionController,
|
|
);
|
|
}
|
|
|
|
final String backendBaseUrl;
|
|
final ApiClient apiClient;
|
|
final SessionStorage sessionStorage;
|
|
final AuthRepository authRepository;
|
|
final LiveRoomsRepository liveRoomsRepository;
|
|
final RecordingsRepository recordingsRepository;
|
|
final RecoveryRepository recoveryRepository;
|
|
final SettingsRepository settingsRepository;
|
|
final LogsRepository logsRepository;
|
|
final MediaRepository mediaRepository;
|
|
@override
|
|
final AppSessionController sessionController;
|
|
|
|
@override
|
|
void dispose() {
|
|
apiClient.dispose();
|
|
sessionController.dispose();
|
|
}
|
|
}
|