diff --git a/src/main/kotlin/di/appModule.kt b/src/main/kotlin/di/appModule.kt index a816063..9a4c79e 100644 --- a/src/main/kotlin/di/appModule.kt +++ b/src/main/kotlin/di/appModule.kt @@ -5,5 +5,5 @@ import org.koin.dsl.module val appModule = module { - includes(dataModule, uiModule, useCaseModule) + includes(dataModule, repositoryModule, uiModule, useCaseModule) } diff --git a/src/main/kotlin/di/dataModule.kt b/src/main/kotlin/di/dataModule.kt index 3ed91aa..86de66f 100644 --- a/src/main/kotlin/di/dataModule.kt +++ b/src/main/kotlin/di/dataModule.kt @@ -1,35 +1,29 @@ package com.berlin.di import com.berlin.data.BaseDataSource -import com.berlin.data.audit.AuditRepositoryImpl import com.berlin.data.csv_data_source.CsvDataSource import com.berlin.data.csv_data_source.schema.* import com.berlin.data.dto.* import com.berlin.data.mapper.* import com.berlin.data.mongodb.config.MongoConfig import com.berlin.data.mongodb.datasource.* -import com.berlin.data.repository.AuthenticationRepositoryImpl -import com.berlin.data.repository.ProjectRepositoryImpl -import com.berlin.data.repository.TaskStateRepositoryImpl -import com.berlin.data.repository.TaskRepositoryImpl import com.berlin.domain.model.* import com.berlin.domain.model.user.User -import com.berlin.domain.repository.* import com.berlin.domain.usecase.utils.hash_algorithm.HashingString import com.berlin.domain.usecase.utils.hash_algorithm.MD5Hasher import com.berlin.domain.usecase.utils.id_generator.IdGenerator import com.berlin.domain.usecase.utils.id_generator.IdGeneratorImplementation import data.AdminUserProvider import data.UserCache +import org.koin.core.module.dsl.singleOf import org.koin.core.qualifier.named import org.koin.dsl.bind import org.koin.dsl.module val dataModule = module { - single { IdGeneratorImplementation() } - single { IdGeneratorImplementation() } - single { MD5Hasher() } + singleOf(::IdGeneratorImplementation) bind IdGenerator::class + singleOf(::MD5Hasher) bind HashingString::class single { AdminUserProvider(get(named("UserDtoDataSource")), get()) } single { UserCache(get().load()) } @@ -80,16 +74,13 @@ val dataModule = module { "csv_files", get(named("ProjectSchema")) ) } - single>(named("UserDtoDataSource")) { CsvDataSource("csv_files", get(named("UserSchema"))) } - single>(named("TaskDataSource")) { CsvDataSource("csv_files", get(named("TaskSchema"))) } single>(named("StateDataSource")) { CsvDataSource( - "csv_files", - get(named("StateSchema")) + "csv_files", get(named("StateSchema")) ) } single>(named("AuditDataSource")) { CsvDataSource("csv_files", get(named("AuditSchema"))) } @@ -99,23 +90,5 @@ val dataModule = module { single { TaskStateMapper() }.bind>() single { UserMapper(get()) }.bind>() single { AuditLogMapper() }.bind>() +} - single { ProjectRepositoryImpl(get(named("ProjectDataSource")), get()) } - single { TaskRepositoryImpl(get(named("TaskDataSource")), get()) } - single { AuditRepositoryImpl(get(named("AuditDataSource")), get()) } - single { - TaskStateRepositoryImpl( - get(named("StateDataSource")), - get(), - get(), - get() - ) - } - single { - AuthenticationRepositoryImpl( - get(), - get(named("UserDataSource")), - get() - ) - } -} \ No newline at end of file diff --git a/src/main/kotlin/di/repositoryModule.kt b/src/main/kotlin/di/repositoryModule.kt new file mode 100644 index 0000000..6c3f64c --- /dev/null +++ b/src/main/kotlin/di/repositoryModule.kt @@ -0,0 +1,44 @@ +package com.berlin.di + +import com.berlin.data.audit.AuditRepositoryImpl +import com.berlin.data.mapper.* +import com.berlin.data.repository.AuthenticationRepositoryImpl +import com.berlin.data.repository.ProjectRepositoryImpl +import com.berlin.data.repository.TaskRepositoryImpl +import com.berlin.data.repository.TaskStateRepositoryImpl +import com.berlin.domain.repository.* +import org.koin.core.qualifier.named +import org.koin.dsl.module + +val repositoryModule = module { + + single { + ProjectRepositoryImpl( + get(named("ProjectDataSource")), get() + ) + } + + single { + TaskRepositoryImpl( + get(named("TaskDataSource")), get() + ) + } + + single { + AuditRepositoryImpl( + get(named("AuditDataSource")), get() + ) + } + + single { + TaskStateRepositoryImpl( + get(named("StateDataSource")), get(), get(), get() + ) + } + + single { + AuthenticationRepositoryImpl( + get(), get(named("UserDataSource")), get() + ) + } +} diff --git a/src/main/kotlin/di/uiModule.kt b/src/main/kotlin/di/uiModule.kt index 5b95d48..8567b5c 100644 --- a/src/main/kotlin/di/uiModule.kt +++ b/src/main/kotlin/di/uiModule.kt @@ -16,42 +16,46 @@ import com.berlin.presentation.project.* import com.berlin.presentation.task_state.* import com.berlin.presentation.task.* import data.UserCache +import org.koin.core.module.dsl.singleOf import org.koin.core.qualifier.named +import org.koin.dsl.bind import org.koin.dsl.module val uiModule = module { - single { ConsoleViewer() } - single { ConsoleReader() } - single { CreateTaskUI(get(), get(), get(), get(), get(), get(), get()) } - single { AssignTaskUI(get(), get(), get(), get(), get()) } - single { DeleteTaskUI(get(), get(), get(), get()) } - single { GetTasksByProjectIdUI(get(), get(), get(), get(), get()) } - single { UpdateTaskUI(get(), get(), get(), get(), get()) } - single { ChangeTaskStateUI(get(), get(), get(), get(), get()) } - single { GetTaskByIdUI(get(), get(), get()) } - single { CreateProjectUi(get(), get(), get()) } - single { DeleteProjectUi(get(), get(), get(), get()) } - single { GetAllProjectsUi(get(), get()) } - single { GetProjectByIdUi(get(), get(), get()) } - single { UpdateProjectUi(get(), get(), get(), get(), get()) } + singleOf(::ConsoleViewer) bind Viewer::class + singleOf(::ConsoleReader) bind Reader::class - single { CreateTaskStateUI(get(), get(), get(), get()) } - single { DeleteTaskStateUi(get(), get(), get(), get()) } - single { GetAllTaskStatesByProjectIdUI(get(), get(), get(), get()) } - single { GetTaskStateByIdUi(get(), get(), get()) } - single { UpdateTaskStateUI(get(), get(), get(), get()) } + singleOf(::CreateTaskUI) + singleOf(::AssignTaskUI) + singleOf(::DeleteTaskUI) + singleOf(::GetTasksByProjectIdUI) + singleOf(::UpdateTaskUI) + singleOf(::ChangeTaskStateUI) + singleOf(::GetTaskByIdUI) - single { AuditByProjectUI(get(), get(), get(), get()) } - single { AuditByTaskUI(get(), get(), get(), get(), get()) } - single { AuditByUserUI(get(), get(), get(), get()) } + singleOf(::CreateProjectUi) + singleOf(::DeleteProjectUi) + singleOf(::GetAllProjectsUi) + singleOf(::GetProjectByIdUi) + singleOf(::UpdateProjectUi) - single { GettingUsersLoggedInUI(get(), get()) } - single { CreateMateUI(get(), get(), get()) } - single { FetchAllUsersUI(get(), get()) } - single { GetUserByIDUI(get(), get(), get()) } - single { GetUserByIDUseCase(get()) } - single { AuthenticateUserUI(get(), get(), get()) } + singleOf(::CreateTaskStateUI) + singleOf(::DeleteTaskStateUi) + singleOf(::GetAllTaskStatesByProjectIdUI) + singleOf(::GetTaskStateByIdUi) + singleOf(::UpdateTaskStateUI) + + singleOf(::AuditByProjectUI) + singleOf(::AuditByTaskUI) + singleOf(::AuditByUserUI) + + singleOf(::GettingUsersLoggedInUI) + singleOf(::CreateMateUI) + singleOf(::FetchAllUsersUI) + singleOf(::GetUserByIDUI) + singleOf(::GetUserByIDUseCase) + singleOf(::AuthenticateUserUI) single(named("tasksCategory")) { CategoryUI( @@ -103,7 +107,7 @@ val uiModule = module { CategoryUI( id = 5, label = "Users", children = listOf( get(), get(), get(), get() - ),viewer = get(), reader = get(), userCache = get() + ), viewer = get(), reader = get(), userCache = get() ) } @@ -115,7 +119,11 @@ val uiModule = module { get(named("statesCategory")), get(named("auditCategory")), get(named("usersCategory")) - ), viewer = get(), reader = get(), authUi = get(), userCache = get() + ), + viewer = get(), + reader = get(), + authUi = get(), + userCache = get() ) } } diff --git a/src/main/kotlin/di/useCaseModule.kt b/src/main/kotlin/di/useCaseModule.kt index f2b42a5..6b9e00d 100644 --- a/src/main/kotlin/di/useCaseModule.kt +++ b/src/main/kotlin/di/useCaseModule.kt @@ -18,43 +18,43 @@ import com.berlin.domain.usecase.task_state.GetTaskStateByIdUseCase import com.berlin.domain.usecase.task_state.GetTaskStateByTaskIdUseCase import com.berlin.domain.usecase.task_state.GetTasksByTaskStateIdUseCase import com.berlin.domain.usecase.task_state.UpdateTaskStateUseCase -import data.UserCache import domain.usecase.auth_service.LoginUserUseCase +import org.koin.core.module.dsl.singleOf import org.koin.dsl.module val useCaseModule = module { - single { CreateTaskUseCase(get(), get(), get()) } - single { AssignTaskUseCase(get(), get(), get()) } - single { DeleteTaskUseCase(get(), get(), get()) } - single { GetTasksByProjectUseCase(get()) } - single { UpdateTaskUseCase(get(), get(), get()) } - single { ChangeTaskStateUseCase(get(), get(), get()) } - single { GetTaskByIdUseCase(get()) } - single { GetAllTasksUseCase(get()) } + singleOf(::CreateTaskUseCase) + singleOf(::AssignTaskUseCase) + singleOf(::DeleteTaskUseCase) + singleOf(::GetTasksByProjectUseCase) + singleOf(::UpdateTaskUseCase) + singleOf(::ChangeTaskStateUseCase) + singleOf(::GetTaskByIdUseCase) + singleOf(::GetAllTasksUseCase) - single { CreateProjectUseCase(get(), get(), get(), get()) } - single { GetAllProjectsUseCase(get()) } - single { DeleteProjectUseCase(get(), get(), get()) } - single { GetProjectByIdUseCase(get()) } - single { UpdateProjectUseCase(get(), get(), get() ) } + singleOf(::CreateProjectUseCase) + singleOf(::GetAllProjectsUseCase) + singleOf(::DeleteProjectUseCase) + singleOf(::GetProjectByIdUseCase) + singleOf(::UpdateProjectUseCase) - single { AddAuditLogUseCase(get(), get()) } - single { GetAuditLogsByProjectIdUseCase(get()) } - single { GetAuditLogsByTaskIdUseCase(get()) } - single { GetAuditLogsByUserIdUseCase(get()) } + singleOf(::AddAuditLogUseCase) + singleOf(::GetAuditLogsByProjectIdUseCase) + singleOf(::GetAuditLogsByTaskIdUseCase) + singleOf(::GetAuditLogsByUserIdUseCase) - single { GetUserByIDUseCase(get()) } - single { GetUserLoggedInUseCase(get()) } - single { GetAllUsersUseCase(get()) } - single { LoginUserUseCase(get(),get(), get()) } - single { CreateMateUseCase(get(), get(), get()) } + singleOf(::GetUserByIDUseCase) + singleOf(::GetUserLoggedInUseCase) + singleOf(::GetAllUsersUseCase) + singleOf(::LoginUserUseCase) + singleOf(::CreateMateUseCase) - single { CreateTaskStateUseCase(get(), get()) } - single { DeleteTaskStateUseCase(get()) } - single { GetAllTaskStatesByProjectIdUseCase(get(), get()) } - single { GetTaskStateByIdUseCase(get()) } - single { GetTaskStateByTaskIdUseCase(get(), get()) } - single { GetTasksByTaskStateIdUseCase(get()) } - single { UpdateTaskStateUseCase(get()) } - single { GetAllTaskStatesUseCase(get()) } + singleOf(::CreateTaskStateUseCase) + singleOf(::DeleteTaskStateUseCase) + singleOf(::GetAllTaskStatesByProjectIdUseCase) + singleOf(::GetTaskStateByIdUseCase) + singleOf(::GetTaskStateByTaskIdUseCase) + singleOf(::GetTasksByTaskStateIdUseCase) + singleOf(::UpdateTaskStateUseCase) + singleOf(::GetAllTaskStatesUseCase) } \ No newline at end of file diff --git a/src/main/kotlin/domain/exception/Exceptions.kt b/src/main/kotlin/domain/exception/Exceptions.kt index ab78c84..f120603 100644 --- a/src/main/kotlin/domain/exception/Exceptions.kt +++ b/src/main/kotlin/domain/exception/Exceptions.kt @@ -1,23 +1,29 @@ package com.berlin.domain.exception -class TaskAlreadyExistsException(message: String) : IllegalStateException(message) -class TaskNotFoundException(message: String) : NoSuchElementException(message) -class StateNotFoundException(message: String) : NoSuchElementException(message) -class ProjectNotFoundException(message: String) : NoSuchElementException(message) -class InputCancelledException(message: String) : RuntimeException(message) -class InvalidSelectionException(message: String) : RuntimeException(message) -class InvalidTaskTitle(message: String): Exception(message) -class InvalidAssigneeException(message: String): Exception(message) -class InvalidTaskStateException(message: String): Exception(message) -class InvalidProjectIdException(message: String): Exception(message) -class InvalidTaskIdException(message: String): Exception(message) -class InvalidCredentialsException(message: String): Exception(message) -class UserNotFoundException(message: String) : NoSuchElementException(message) -class InvalidUserIdException(message: String): Exception(message) -class UserNotLoggedInException(message: String) : NoSuchElementException(message) -class InvalidTaskException(message: String): Exception(message) -class InvalidProjectException(message: String): Exception(message) -class InvalidStateException(message: String): Exception(message) -class InvalidAuditLogException(message: String): Exception(message) -class InvalidStateIdException(message: String): Exception(message) -class InvalidStateNameException(message: String): Exception(message) +open class InvalidInputException(message: String) : Exception(message) +class InvalidTaskTitle(message: String) : InvalidInputException(message) +class InvalidAssigneeException(message: String) : InvalidInputException(message) +class InvalidTaskStateException(message: String) : InvalidInputException(message) +class InvalidProjectIdException(message: String) : InvalidInputException(message) +class InvalidTaskIdException(message: String) : InvalidInputException(message) +class InvalidCredentialsException(message: String) : InvalidInputException(message) +class InvalidUserIdException(message: String) : InvalidInputException(message) +class InvalidTaskException(message: String) : InvalidInputException(message) +class InvalidProjectException(message: String) : InvalidInputException(message) +class InvalidStateException(message: String) : InvalidInputException(message) +class InvalidAuditLogException(message: String) : InvalidInputException(message) +class InvalidStateIdException(message: String) : InvalidInputException(message) +class InvalidStateNameException(message: String) : InvalidInputException(message) + +open class NotFoundException(message: String) : NoSuchElementException(message) +class TaskNotFoundException(message: String) : NotFoundException(message) +class StateNotFoundException(message: String) : NotFoundException(message) +class ProjectNotFoundException(message: String) : NotFoundException(message) +class UserNotFoundException(message: String) : NotFoundException(message) + +open class SelectionException(message: String) : RuntimeException(message) +class InputCancelledException(message: String) : SelectionException(message) +class InvalidSelectionException(message: String) : SelectionException(message) + +open class AlreadyExistsException(message: String) : IllegalStateException(message) +class TaskAlreadyExistsException(message: String) : AlreadyExistsException(message)