Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/kotlin/di/appModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ import org.koin.dsl.module


val appModule = module {
includes(dataModule, uiModule, useCaseModule)
includes(dataModule, repositoryModule, uiModule, useCaseModule)
}
37 changes: 5 additions & 32 deletions src/main/kotlin/di/dataModule.kt
Original file line number Diff line number Diff line change
@@ -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<IdGenerator> { IdGeneratorImplementation() }
single<IdGeneratorImplementation> { IdGeneratorImplementation() }
single<HashingString> { MD5Hasher() }
singleOf(::IdGeneratorImplementation) bind IdGenerator::class
singleOf(::MD5Hasher) bind HashingString::class

single { AdminUserProvider(get(named("UserDtoDataSource")), get()) }
single { UserCache(get<AdminUserProvider>().load()) }
Expand Down Expand Up @@ -80,16 +74,13 @@ val dataModule = module {
"csv_files", get(named("ProjectSchema"))
)
}

single<BaseDataSource<UserDto>>(named("UserDtoDataSource")) {
CsvDataSource("csv_files", get(named("UserSchema")))
}

single<BaseDataSource<Task>>(named("TaskDataSource")) { CsvDataSource("csv_files", get(named("TaskSchema"))) }
single<BaseDataSource<TaskState>>(named("StateDataSource")) {
CsvDataSource(
"csv_files",
get(named("StateSchema"))
"csv_files", get(named("StateSchema"))
)
}
single<BaseDataSource<AuditLog>>(named("AuditDataSource")) { CsvDataSource("csv_files", get(named("AuditSchema"))) }
Expand All @@ -99,23 +90,5 @@ val dataModule = module {
single { TaskStateMapper() }.bind<EntityMapper<TaskStateDto, TaskState>>()
single { UserMapper(get()) }.bind<EntityMapper<UserDto, User>>()
single { AuditLogMapper() }.bind<EntityMapper<AuditLogDto, AuditLog>>()
}

single<ProjectRepository> { ProjectRepositoryImpl(get(named("ProjectDataSource")), get<ProjectMapper>()) }
single<TaskRepository> { TaskRepositoryImpl(get(named("TaskDataSource")), get<TaskMapper>()) }
single<AuditRepository> { AuditRepositoryImpl(get(named("AuditDataSource")), get<AuditLogMapper>()) }
single<TaskStateRepository> {
TaskStateRepositoryImpl(
get(named("StateDataSource")),
get(),
get<TaskStateMapper>(),
get<TaskMapper>()
)
}
single<AuthenticationRepository> {
AuthenticationRepositoryImpl(
get(),
get(named("UserDataSource")),
get<UserMapper>()
)
}
}
44 changes: 44 additions & 0 deletions src/main/kotlin/di/repositoryModule.kt
Original file line number Diff line number Diff line change
@@ -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<ProjectRepository> {
ProjectRepositoryImpl(
get(named("ProjectDataSource")), get<ProjectMapper>()
)
}

single<TaskRepository> {
TaskRepositoryImpl(
get(named("TaskDataSource")), get<TaskMapper>()
)
}

single<AuditRepository> {
AuditRepositoryImpl(
get(named("AuditDataSource")), get<AuditLogMapper>()
)
}

single<TaskStateRepository> {
TaskStateRepositoryImpl(
get(named("StateDataSource")), get(), get<TaskStateMapper>(), get<TaskMapper>()
)
}

single<AuthenticationRepository> {
AuthenticationRepositoryImpl(
get(), get(named("UserDataSource")), get<UserMapper>()
)
}
}
68 changes: 38 additions & 30 deletions src/main/kotlin/di/uiModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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<Viewer> { ConsoleViewer() }
single<Reader> { 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<UiRunner>(named("tasksCategory")) {
CategoryUI(
Expand Down Expand Up @@ -103,7 +107,7 @@ val uiModule = module {
CategoryUI(
id = 5, label = "Users", children = listOf(
get<CreateMateUI>(), get<FetchAllUsersUI>(), get<GettingUsersLoggedInUI>(), get<GetUserByIDUI>()
),viewer = get<Viewer>(), reader = get<Reader>(), userCache = get()
), viewer = get<Viewer>(), reader = get<Reader>(), userCache = get()
)
}

Expand All @@ -115,7 +119,11 @@ val uiModule = module {
get(named("statesCategory")),
get(named("auditCategory")),
get(named("usersCategory"))
), viewer = get<Viewer>(), reader = get<Reader>(), authUi = get<AuthenticateUserUI>(), userCache = get<UserCache>()
),
viewer = get<Viewer>(),
reader = get<Reader>(),
authUi = get<AuthenticateUserUI>(),
userCache = get<UserCache>()
)
}
}
62 changes: 31 additions & 31 deletions src/main/kotlin/di/useCaseModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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<UserCache>()) }
single { DeleteTaskUseCase(get(), get(), get<UserCache>()) }
single { GetTasksByProjectUseCase(get()) }
single { UpdateTaskUseCase(get(), get(), get<UserCache>()) }
single { ChangeTaskStateUseCase(get(), get(), get<UserCache>()) }
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<UserCache>()) }
single { GetAllProjectsUseCase(get()) }
single { DeleteProjectUseCase(get(), get(), get<UserCache>()) }
single { GetProjectByIdUseCase(get()) }
single { UpdateProjectUseCase(get(), get(), get<UserCache>() ) }
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)
}
48 changes: 27 additions & 21 deletions src/main/kotlin/domain/exception/Exceptions.kt
Original file line number Diff line number Diff line change
@@ -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)