Files
rasadyar_application/packages/chicken/lib/data/di/chicken_di.dart

162 lines
5.8 KiB
Dart

import 'package:rasadyar_chicken/data/common/dio_error_handler.dart';
import 'package:rasadyar_chicken/features/common/presentation/routes/routes.dart';
import 'package:rasadyar_chicken/features/common/data/di/common_di.dart';
import 'package:rasadyar_chicken/data/data_source/remote/kill_house/kill_house_remote.dart';
import 'package:rasadyar_chicken/data/data_source/remote/kill_house/kill_house_remote_impl.dart';
import 'package:rasadyar_chicken/data/repositories/kill_house/kill_house_repository.dart';
import 'package:rasadyar_chicken/data/repositories/kill_house/kill_house_repository_impl.dart';
import 'package:rasadyar_chicken/features/poultry_science/data/di/poultry_science_di.dart';
import 'package:rasadyar_chicken/features/steward/data/di/steward_di.dart';
import 'package:rasadyar_chicken/features/province_operator/data/di/province_operator_di.dart';
import 'package:rasadyar_chicken/features/province_inspector/data/di/province_inspector_di.dart';
import 'package:rasadyar_chicken/features/city_jahad/data/di/city_jahad_di.dart';
import 'package:rasadyar_chicken/features/city_poultry/data/di/city_poultry_di.dart';
import 'package:rasadyar_chicken/features/vet_farm/data/di/vet_farm_di.dart';
import 'package:rasadyar_chicken/features/super_admin/data/di/super_admin_di.dart';
import 'package:rasadyar_chicken/features/province_supervisor/data/di/province_supervisor_di.dart';
import 'package:rasadyar_chicken/features/jahad/data/di/jahad_di.dart';
import 'package:rasadyar_core/core.dart';
GetIt diChicken = GetIt.asNewInstance();
Future<void> setupChickenDI() async {
if (diChicken.isRegistered<DioErrorHandler>()) {
await diChicken.unregister<DioErrorHandler>();
}
diChicken.registerSingleton(DioErrorHandler());
var tokenService = Get.find<TokenStorageService>();
tokenService.getBaseUrl(Module.chicken);
diChicken.registerLazySingleton<AppInterceptor>(
() => AppInterceptor(
// سامانه مرغ فعلاً رفرش توکن ندارد
refreshTokenCallback: () async => null,
saveTokenCallback: (String newToken) async {
await tokenService.saveAccessToken(Module.chicken, newToken);
},
clearTokenCallback: () async {
await tokenService.deleteModuleTokens(Module.chicken);
Get.offAllNamed(CommonRoutes.auth, arguments: Module.chicken);
},
),
instanceName: 'chickenInterceptor',
);
var baseUrl = tokenService.baseurl.value;
diChicken.registerLazySingleton<DioRemote>(
() => DioRemote(
baseUrl: baseUrl,
interceptors: diChicken.get<AppInterceptor>(
instanceName: 'chickenInterceptor',
),
),
);
final dioRemote = diChicken.get<DioRemote>();
await dioRemote.init();
// Setup common feature DI
await setupCommonDI(diChicken, dioRemote);
// Setup poultry_science feature DI
await setupPoultryScienceDI(diChicken, dioRemote);
// Setup steward feature DI
await setupStewardDI(diChicken, dioRemote);
// Setup province_operator feature DI
await setupProvinceOperatorDI(diChicken, dioRemote);
// Setup province_inspector feature DI
await setupProvinceInspectorDI(diChicken, dioRemote);
// Setup city_jahad feature DI
await setupCityJahadDI(diChicken, dioRemote);
// Setup city_poultry feature DI
await setupCityPoultryDI(diChicken, dioRemote);
// Setup vet_farm feature DI
await setupVetFarmDI(diChicken, dioRemote);
// Setup super_admin feature DI
await setupSuperAdminDI(diChicken, dioRemote);
// Setup province_supervisor feature DI
await setupProvinceSupervisorDI(diChicken, dioRemote);
// Setup jahad feature DI
await setupJahadDI(diChicken, dioRemote);
//region kill house module DI
diChicken.registerLazySingleton<KillHouseRemoteDataSource>(
() => KillHouseRemoteDataSourceImpl(diChicken.get<DioRemote>()),
);
diChicken.registerLazySingleton<KillHouseRepository>(
() => KillHouseRepositoryImpl(diChicken.get<KillHouseRemoteDataSource>()),
);
//endregion
}
Future<void> newSetupAuthDI(String newUrl) async {
var tokenService = Get.find<TokenStorageService>();
await tokenService.saveBaseUrl(Module.chicken, newUrl);
// پاک‌سازی DI مخصوص ماژول مرغ
await diChicken.resetScope();
diChicken.pushNewScope();
// --- Re-register AppInterceptor
diChicken.registerLazySingleton<AppInterceptor>(
() => AppInterceptor(
refreshTokenCallback: () async => null,
saveTokenCallback: (newToken) async {},
clearTokenCallback: () async {
await tokenService.deleteModuleTokens(Module.chicken);
Get.offAllNamed(CommonRoutes.auth, arguments: Module.chicken);
},
),
instanceName: 'chickenInterceptor',
);
// --- Re-register DioRemote
diChicken.registerLazySingleton<DioRemote>(
() => DioRemote(
baseUrl: newUrl,
interceptors: diChicken.get<AppInterceptor>(
instanceName: 'chickenInterceptor',
),
),
);
final dioRemote = diChicken.get<DioRemote>();
await dioRemote.init();
// --- common, poultry_science, steward, and other features
await setupCommonDI(diChicken, dioRemote);
await setupPoultryScienceDI(diChicken, dioRemote);
await setupStewardDI(diChicken, dioRemote);
await setupProvinceOperatorDI(diChicken, dioRemote);
await setupProvinceInspectorDI(diChicken, dioRemote);
await setupCityJahadDI(diChicken, dioRemote);
await setupCityPoultryDI(diChicken, dioRemote);
await setupVetFarmDI(diChicken, dioRemote);
await setupSuperAdminDI(diChicken, dioRemote);
await setupProvinceSupervisorDI(diChicken, dioRemote);
await setupJahadDI(diChicken, dioRemote);
}
Future<void> reRegister<T extends Object>(T Function() factory) async {
if (diChicken.isRegistered<T>()) {
await diChicken.unregister<T>();
}
diChicken.registerLazySingleton<T>(factory);
}
Future<void> removeChickenDI() async {
await diChicken.resetScope();
}