146 lines
4.9 KiB
Dart
146 lines
4.9 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/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/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 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);
|
|
|
|
|
|
}
|
|
|
|
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 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();
|
|
}
|