189 lines
7.7 KiB
Dart
189 lines
7.7 KiB
Dart
// ignore_for_file: public_member_api_docs
|
|
|
|
import 'package:dio/dio.dart';
|
|
import 'package:get_it/get_it.dart';
|
|
|
|
import 'core/network/api_client.dart';
|
|
import 'core/network/api_error.dart';
|
|
import 'core/network/interceptors/auth_interceptor.dart';
|
|
import 'core/services/token_storage.dart';
|
|
import 'features/auth/application/auth_service.dart';
|
|
import 'features/auth/data/repositories/auth_repository_remote.dart';
|
|
import 'features/auth/domain/repositories/auth_repository.dart';
|
|
import 'features/dashboard/data/repositories/dashboard_repository_remote.dart';
|
|
import 'features/dashboard/domain/repositories/dashboard_repository.dart';
|
|
import 'features/inventory/lookups/data/repositories/inventory_lookup_repository_remote.dart';
|
|
import 'features/inventory/lookups/domain/repositories/inventory_lookup_repository.dart';
|
|
import 'features/inventory/transactions/data/repositories/stock_transaction_repository_remote.dart';
|
|
import 'features/inventory/transactions/data/repositories/transaction_customer_repository_remote.dart';
|
|
import 'features/inventory/transactions/data/repositories/transaction_line_repository_remote.dart';
|
|
import 'features/inventory/transactions/domain/repositories/stock_transaction_repository.dart';
|
|
import 'features/masters/customer/data/repositories/customer_repository_remote.dart';
|
|
import 'features/masters/customer/domain/repositories/customer_repository.dart';
|
|
import 'features/masters/group/data/repositories/group_repository_remote.dart';
|
|
import 'features/masters/group/domain/repositories/group_repository.dart';
|
|
import 'features/masters/menu/data/repositories/menu_repository_remote.dart';
|
|
import 'features/masters/menu/domain/repositories/menu_repository.dart';
|
|
import 'features/masters/group_permission/data/repositories/group_permission_repository_remote.dart';
|
|
import 'features/masters/group_permission/domain/repositories/group_permission_repository.dart';
|
|
import 'features/masters/product/data/repositories/product_repository_remote.dart';
|
|
import 'features/masters/product/domain/repositories/product_repository.dart';
|
|
import 'features/masters/user/data/repositories/user_repository_remote.dart';
|
|
import 'features/masters/user/domain/repositories/user_repository.dart';
|
|
import 'features/masters/vendor/data/repositories/vendor_repository_remote.dart';
|
|
import 'features/masters/vendor/domain/repositories/vendor_repository.dart';
|
|
import 'features/masters/warehouse/data/repositories/warehouse_repository_remote.dart';
|
|
import 'features/masters/warehouse/domain/repositories/warehouse_repository.dart';
|
|
import 'features/masters/uom/data/repositories/uom_repository_remote.dart';
|
|
import 'features/masters/uom/domain/repositories/uom_repository.dart';
|
|
import 'features/approvals/data/repositories/approval_repository_remote.dart';
|
|
import 'features/approvals/data/repositories/approval_template_repository_remote.dart';
|
|
import 'features/approvals/history/data/repositories/approval_history_repository_remote.dart';
|
|
import 'features/approvals/history/domain/repositories/approval_history_repository.dart';
|
|
import 'features/approvals/step/data/repositories/approval_step_repository_remote.dart';
|
|
import 'features/approvals/domain/repositories/approval_repository.dart';
|
|
import 'features/approvals/domain/repositories/approval_template_repository.dart';
|
|
import 'features/approvals/step/domain/repositories/approval_step_repository.dart';
|
|
import 'features/util/postal_search/data/repositories/postal_search_repository_remote.dart';
|
|
import 'features/util/postal_search/domain/repositories/postal_search_repository.dart';
|
|
import 'features/reporting/data/repositories/reporting_repository_remote.dart';
|
|
import 'features/reporting/domain/repositories/reporting_repository.dart';
|
|
|
|
/// 전역 DI 컨테이너
|
|
final GetIt sl = GetIt.instance;
|
|
|
|
/// 의존성 등록(스켈레톤)
|
|
/// - Environment.initialize() 이후 호출하여 baseUrl/타임아웃 등을 주입한다.
|
|
Future<void> initInjection({
|
|
required String baseUrl,
|
|
Duration? connectTimeout,
|
|
Duration? receiveTimeout,
|
|
}) async {
|
|
// Dio 기본 옵션 설정
|
|
final options = BaseOptions(
|
|
baseUrl: baseUrl,
|
|
connectTimeout: connectTimeout ?? const Duration(seconds: 15),
|
|
receiveTimeout: receiveTimeout ?? const Duration(seconds: 30),
|
|
headers: const {'Accept': 'application/json'},
|
|
);
|
|
|
|
final dio = Dio(options);
|
|
|
|
// 인터셉터 등록 (Auth 등)
|
|
final tokenStorage = createTokenStorage();
|
|
sl.registerLazySingleton<TokenStorage>(() => tokenStorage);
|
|
sl.registerLazySingleton<ApiErrorMapper>(ApiErrorMapper.new);
|
|
|
|
final authInterceptor = AuthInterceptor(
|
|
tokenStorage: tokenStorage,
|
|
dio: dio,
|
|
onRefresh: () {
|
|
if (!sl.isRegistered<AuthService>()) {
|
|
return Future<TokenPair?>.value(null);
|
|
}
|
|
return sl<AuthService>().refreshForInterceptor();
|
|
},
|
|
);
|
|
dio.interceptors.add(authInterceptor);
|
|
|
|
// 개발용 로거는 필요 시 추가 (pretty_dio_logger 등)
|
|
// if (!kReleaseMode) { dio.interceptors.add(PrettyDioLogger(...)); }
|
|
|
|
// ApiClient 등록
|
|
sl.registerLazySingleton<ApiClient>(
|
|
() => ApiClient(dio: dio, errorMapper: sl<ApiErrorMapper>()),
|
|
);
|
|
|
|
// 인증 서비스 등록
|
|
sl.registerLazySingleton<AuthRepository>(
|
|
() => AuthRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
sl.registerLazySingleton<AuthService>(
|
|
() => AuthService(
|
|
repository: sl<AuthRepository>(),
|
|
tokenStorage: sl<TokenStorage>(),
|
|
),
|
|
);
|
|
|
|
sl.registerLazySingleton<DashboardRepository>(
|
|
() => DashboardRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
// 리포지토리 등록 (예: 벤더)
|
|
sl.registerLazySingleton<VendorRepository>(
|
|
() => VendorRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<ProductRepository>(
|
|
() => ProductRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<WarehouseRepository>(
|
|
() => WarehouseRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<UomRepository>(
|
|
() => UomRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<CustomerRepository>(
|
|
() => CustomerRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<GroupRepository>(
|
|
() => GroupRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<UserRepository>(
|
|
() => UserRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<MenuRepository>(
|
|
() => MenuRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<GroupPermissionRepository>(
|
|
() => GroupPermissionRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<ApprovalRepository>(
|
|
() => ApprovalRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<ApprovalTemplateRepository>(
|
|
() => ApprovalTemplateRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<ApprovalStepRepository>(
|
|
() => ApprovalStepRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<ApprovalHistoryRepository>(
|
|
() => ApprovalHistoryRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<PostalSearchRepository>(
|
|
() => PostalSearchRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<InventoryLookupRepository>(
|
|
() => InventoryLookupRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<StockTransactionRepository>(
|
|
() => StockTransactionRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<TransactionLineRepository>(
|
|
() => TransactionLineRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<TransactionCustomerRepository>(
|
|
() => TransactionCustomerRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
|
|
sl.registerLazySingleton<ReportingRepository>(
|
|
() => ReportingRepositoryRemote(apiClient: sl<ApiClient>()),
|
|
);
|
|
}
|