Files
finger_print_app/lib/core/di/injection_container.dart
Mohammed Al-Samarraie 33099c4497 1111
2026-01-18 19:52:10 +03:00

101 lines
3.7 KiB
Dart

import 'package:coda_project/data/datasources/attendance_remote_data_source.dart';
import 'package:coda_project/data/repositories/attendance_repository_impl.dart';
import 'package:coda_project/domain/repositories/attendance_repository.dart';
import 'package:dio/dio.dart';
import 'package:get_it/get_it.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../network/api_client.dart';
import '../../data/datasources/auth_remote_data_source.dart';
import '../../data/datasources/user_local_data_source.dart';
import '../../data/datasources/vacation_remote_data_source.dart';
import '../../data/datasources/advance_remote_data_source.dart';
import '../../data/repositories/auth_repository_impl.dart';
import '../../data/repositories/vacation_repository_impl.dart';
import '../../data/repositories/advance_repository_impl.dart';
import '../../domain/repositories/auth_repository.dart';
import '../../domain/repositories/vacation_repository.dart';
import '../../domain/repositories/advance_repository.dart';
import '../../domain/usecases/login_usecase.dart';
import '../../domain/usecases/attendance_login_usecase.dart';
import '../../domain/usecases/attendance_logout_usecase.dart';
import '../../domain/usecases/create_vacation_usecase.dart';
import '../../domain/usecases/get_vacation_types_usecase.dart';
import '../../domain/usecases/get_vacations_usecase.dart';
import '../../domain/usecases/create_advance_usecase.dart';
import '../../domain/usecases/get_advances_usecase.dart';
import '../../presentation/blocs/login/login_bloc.dart';
final sl = GetIt.instance;
Future<void> initializeDependencies() async {
// External
sl.registerLazySingleton<Dio>(() => Dio());
// SharedPreferences
final sharedPreferences = await SharedPreferences.getInstance();
sl.registerLazySingleton<SharedPreferences>(() => sharedPreferences);
// Core
sl.registerLazySingleton<ApiClient>(
() => ApiClient(dio: sl(), sharedPreferences: sl()),
);
// Data sources
sl.registerLazySingleton<AuthRemoteDataSource>(
() => AuthRemoteDataSourceImpl(apiClient: sl()),
);
sl.registerLazySingleton<UserLocalDataSource>(
() => UserLocalDataSourceImpl(sharedPreferences: sl()),
);
// Repositories
sl.registerLazySingleton<AuthRepository>(
() => AuthRepositoryImpl(remoteDataSource: sl(), localDataSource: sl()),
);
// Use cases
sl.registerLazySingleton(() => LoginUseCase(repository: sl()));
// Blocs
sl.registerFactory(() => LoginBloc(loginUseCase: sl()));
//Attendence
sl.registerLazySingleton<AttendanceRemoteDataSource>(
() => AttendanceRemoteDataSourceImpl(apiClient: sl()),
);
sl.registerLazySingleton<AttendanceRepository>(
() => AttendanceRepositoryImpl(remoteDataSource: sl()),
);
sl.registerLazySingleton(() => AttendanceLoginUsecase(repository: sl()));
sl.registerLazySingleton(() => AttendanceLogoutUseCase(repository: sl()));
// Vacation
sl.registerLazySingleton<VacationRemoteDataSource>(
() => VacationRemoteDataSourceImpl(apiClient: sl()),
);
sl.registerLazySingleton<VacationRepository>(
() => VacationRepositoryImpl(remoteDataSource: sl()),
);
sl.registerLazySingleton(() => CreateVacationUseCase(repository: sl()));
sl.registerLazySingleton(() => GetVacationTypesUseCase(repository: sl()));
sl.registerLazySingleton(() => GetVacationsUseCase(repository: sl()));
// Advance
sl.registerLazySingleton<AdvanceRemoteDataSource>(
() => AdvanceRemoteDataSourceImpl(apiClient: sl()),
);
sl.registerLazySingleton<AdvanceRepository>(
() => AdvanceRepositoryImpl(remoteDataSource: sl()),
);
sl.registerLazySingleton(() => CreateAdvanceUseCase(repository: sl()));
sl.registerLazySingleton(() => GetAdvancesUseCase(repository: sl()));
}