Skip to content
Closed
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
24 changes: 24 additions & 0 deletions .github/workflows/branch-name-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Branch Name Check

on:
pull_request:
types: [opened, edited, synchronize, reopened]

jobs:
check-branch-name:
runs-on: ubuntu-latest
steps:
- name: Check Branch Name
uses: actions/github-script@v6
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const branchName = context.payload.pull_request.head.ref;
const regex = /^(JIRA-\d+)-(bugfix|feature|test|refactor|chore| experimental)\/[\w-]+$/;

if (!regex.test(branchName)) {
core.setFailed('Branch name does not match the required format: JIRA-<NUMBER>-(bugfix|experimental|feature|test|refactor|chore)/<branch-name>');
} else {
console.log('Branch name matches the required format');
}

7 changes: 7 additions & 0 deletions csv_files/audit.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"Audit Id","Timestamp","CreatedBy","Audit Action","Changes Description","Entity Type","Entity Id"
"AUDITDD_52700","1746681952700","user1234","CREATE","","TASK","titlett_52651"
"AUDITDD_16009","1746682016009","user1234","UPDATE","","TASK","titlett_52651"
"AUDITDD_26796","1746682026796","user1234","DELETE","","TASK","titlett_52651"
"AUDITDDDD_29153","1746685829153","user1234","CREATE","","TASK","titlett_29143"
"AUDITDD_39457","1746685839457","user1234","UPDATE","","TASK","titlett_29143""AUDITDD_97145","1746688997145","user1234","CREATE","","PROJECT","taskmangermmmm_97132"
"AUDITDDDD_44756","1746689044756","user1234","UPDATE","","PROJECT","taskmangermmmm_97132"
2 changes: 2 additions & 0 deletions csv_files/project.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
"Project Id","Project Name","Description","States","Tasks"
"taskmangermmmm_97132","title updated","the ultimate project","[]","[]"
1 change: 1 addition & 0 deletions csv_files/task.csv
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
"Task Id","Project Id","Title","Description","State Id","Assigned To User Id","Create By User Id"
"dfgsdgfdd_66055","P1","dfgsdgfd","gasdfgfdaf","S1","U1","U1"
"titlett_29143","P1","title","description","S1","U2","user1234"
2 changes: 2 additions & 0 deletions csv_files/user.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
"User Id","UserName","Password","User Role"
"ahmadmmmm_70365","ahmad","d2dfac4d62e5470ab0c92d6f425b977d","MATE"
7 changes: 4 additions & 3 deletions src/main/kotlin/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import com.berlin.di.uiModule
import com.berlin.di.useCaseModule
import com.berlin.di.*
import com.berlin.presentation.MainMenuUI
import com.berlin.presentation.authService.AuthenticateUserUi
import org.koin.core.context.startKoin
import org.koin.mp.KoinPlatform.getKoin

Expand All @@ -14,8 +13,10 @@ fun main() {
printLogger()
modules(dataModule, appModule, useCaseModule, uiModule)
}

val mainMenu: MainMenuUI = getKoin().get()
mainMenu.run()

}
}


// autit -> project [tasks]
6 changes: 4 additions & 2 deletions src/main/kotlin/data/UserCache.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package data

import com.berlin.domain.model.User

object UserCache {
var currentUser: User? = null
class UserCache(
admin: User
) {
var currentUser: User = admin
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,14 @@ package com.berlin.data.authentication
import com.berlin.data.BaseDataSource
import com.berlin.domain.exception.UserNotFoundException
import com.berlin.domain.exception.UserNotLoggedInException
import com.berlin.domain.hashPassword.HashingPassword
import com.berlin.domain.hashPassword.MD5Hasher
import com.berlin.domain.helper.IdGenerator
import com.berlin.domain.helper.IdGeneratorImplementation
import com.berlin.domain.model.User
import com.berlin.domain.model.UserRole
import com.berlin.domain.repository.AuthenticationRepository
import data.UserCache
import kotlin.Result.Companion.failure


class AuthenticationRepositoryImpl(
private val userCache: UserCache,
private val userDataSource: BaseDataSource<User>
): AuthenticationRepository {

Expand Down Expand Up @@ -45,11 +41,11 @@ class AuthenticationRepositoryImpl(


override fun getCurrentUser(): Result<User> {
val user = UserCache.currentUser
val user = userCache.currentUser
return if (user != null) {
Result.success(user)
} else {
Result.failure(UserNotLoggedInException("No one logged in"))
failure(UserNotLoggedInException("No one logged in"))

}

Expand Down
18 changes: 14 additions & 4 deletions src/main/kotlin/di/appModule.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package com.berlin.di


import com.berlin.domain.hashPassword.HashingPassword
import com.berlin.domain.hashPassword.HashingString
import com.berlin.domain.hashPassword.MD5Hasher
import com.berlin.domain.helper.IdGeneratorImplementation
import com.berlin.domain.helper.IdGenerator
import com.berlin.domain.model.User
import com.berlin.domain.model.UserRole
import com.berlin.domain.usecase.utils.IDGenerator.IdGeneratorImplementation
import com.berlin.domain.usecase.utils.IDGenerator.IdGenerator
import com.berlin.presentation.io.ConsoleReader
import com.berlin.presentation.io.ConsoleViewer
import com.berlin.presentation.io.Reader
import com.berlin.presentation.io.Viewer
import data.UserCache
import org.koin.dsl.module


Expand All @@ -17,5 +20,12 @@ val appModule = module {
single<Reader> { ConsoleReader() }
single<IdGenerator> { IdGeneratorImplementation() }
single<IdGeneratorImplementation> { IdGeneratorImplementation() }
single <HashingPassword> { MD5Hasher() }
single <HashingString> { MD5Hasher() }

single {
UserCache(
User("user1234", "admin", "1212", UserRole.ADMIN)
)
}

}
68 changes: 27 additions & 41 deletions src/main/kotlin/di/dataModule.kt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
package com.berlin.di

import com.berlin.data.Audit.AuditRepositoryImpl
import com.berlin.data.BaseDataSource
import com.berlin.data.BaseSchema
Expand All @@ -9,11 +10,8 @@ import com.berlin.data.project.ProjectRepositoryImpl
import com.berlin.data.schema.*
import com.berlin.data.state.StateRepositoryImpl
import com.berlin.domain.model.*
import com.berlin.domain.repository.AuditRepository
import com.berlin.domain.repository.AuthenticationRepository
import com.berlin.domain.repository.ProjectRepository
import com.berlin.domain.repository.StateRepository
import com.berlin.domain.repository.TaskRepository
import com.berlin.domain.repository.*
import data.UserCache
import org.koin.core.qualifier.named
import org.koin.dsl.module

Expand All @@ -22,61 +20,49 @@ val dataModule = module {

single<BaseSchema<User>>(named("UserSchema")) {
UserSchema(
fileName = "user.csv",
header = listOf("User Id", "UserName", "Password", "User Role")
fileName = "user.csv", header = listOf("User Id", "UserName", "Password", "User Role")
)
}
single<BaseSchema<Project>>(named("ProjectSchema")) {
ProjectSchema(
fileName = "project.csv",
header = listOf("Project Id", "Project Name", "Description", "States", "Tasks")
fileName = "project.csv", header = listOf("Project Id", "Project Name", "Description", "States", "Tasks")
)
}
single<BaseSchema<AuditLog>>(named("AuditSchema")) {
AuditSchema(
fileName = "audit.csv",
header = listOf(
"Audit Id",
"Timestamp",
"CreatedBy",
"Audit Action",
"Changes Description",
"Entity Type",
"Entity Id"
fileName = "audit.csv", header = listOf(
"Audit Id", "Timestamp", "CreatedBy", "Audit Action", "Changes Description", "Entity Type", "Entity Id"
)
)
}
single<BaseSchema<State>>(named("StateSchema")) {
StateSchema(fileName = "state.csv",
header = listOf("State Id", "Name", "Project Id")) }
StateSchema(
fileName = "state.csv", header = listOf("State Id", "Name", "Project Id")
)
}
single<BaseSchema<Task>>(named("TaskSchema")) {
TaskSchema(
fileName = "task.csv",
header = listOf(
"Task Id",
"Project Id",
"Title",
"Description",
"State Id",
"Assigned To User Id",
"Create By User Id"
fileName = "task.csv", header = listOf(
"Task Id", "Project Id", "Title", "Description", "State Id", "Assigned To User Id", "Create By User Id"
)
)
}

single<BaseDataSource<User>>(named("UserDataSource")){ CsvDataSource("csv_files", get(named("UserSchema"))) }
single<BaseDataSource<Project>>(named("ProjectDataSource")){ CsvDataSource("csv_files", get(named("ProjectSchema"))) }
single<BaseDataSource<Task>>(named("TaskDataSource")){ CsvDataSource("csv_files", get(named("TaskSchema"))) }
single<BaseDataSource<State>>(named("StateDataSource")){ CsvDataSource("csv_files", get(named("StateSchema"))) }
single<BaseDataSource<AuditLog>>(named("AuditDataSource")){ CsvDataSource("csv_files", get(named("AuditSchema"))) }

single<BaseDataSource<User>>(named("UserDataSource")) { CsvDataSource("csv_files", get(named("UserSchema"))) }
single<BaseDataSource<Project>>(named("ProjectDataSource")) {
CsvDataSource(
"csv_files", get(named("ProjectSchema"))
)
}
single<BaseDataSource<Task>>(named("TaskDataSource")) { CsvDataSource("csv_files", get(named("TaskSchema"))) }
single<BaseDataSource<State>>(named("StateDataSource")) { CsvDataSource("csv_files", get(named("StateSchema"))) }
single<BaseDataSource<AuditLog>>(named("AuditDataSource")) { CsvDataSource("csv_files", get(named("AuditSchema"))) }


single <ProjectRepository> { ProjectRepositoryImpl(get(named("ProjectDataSource"))) }
single <TaskRepository> { TaskRepositoryImpl(get(named("TaskDataSource"))) }
single <AuditRepository>{ AuditRepositoryImpl(get(named("AuditDataSource"))) }
single <StateRepository>{ StateRepositoryImpl(get(named("StateDataSource")),get(named("TaskDataSource"))) }
single <AuthenticationRepository> { AuthenticationRepositoryImpl(get(named("UserDataSource"))) }

single <AuthenticationRepository>{ AuthenticationRepositoryImpl(get(named("UserDataSource"))) }
single<ProjectRepository> { ProjectRepositoryImpl(get(named("ProjectDataSource"))) }
single<TaskRepository> { TaskRepositoryImpl(get(named("TaskDataSource"))) }
single<AuditRepository> { AuditRepositoryImpl(get(named("AuditDataSource"))) }
single<StateRepository> { StateRepositoryImpl(get(named("StateDataSource")), get(named("TaskDataSource"))) }
single<AuthenticationRepository> { AuthenticationRepositoryImpl(get(), get(named("UserDataSource"))) }
}
22 changes: 16 additions & 6 deletions src/main/kotlin/di/uiModule.kt
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
package com.berlin.di
package com.berlin.di

import com.berlin.data.DummyData
import com.berlin.domain.model.User
import com.berlin.domain.usecase.authService.GetUserByIDUseCase
import com.berlin.presentation.MainMenuUI
import com.berlin.presentation.audit.AuditByProjectUI
import com.berlin.presentation.audit.AuditByTaskUI
import com.berlin.presentation.audit.AuditByUserUI
import com.berlin.presentation.authService.*
import com.berlin.presentation.project.*
import com.berlin.presentation.task.*
import data.UserCache
import org.koin.core.qualifier.named
import org.koin.dsl.module


val uiModule = module {
single<User>(named("currentUser")) { DummyData.users.first() }
// single<User>(named("currentUser")) { DummyData.users.first() }

single { CreateTaskUI(get(), get(named("currentUser")), get(), get()) }
single { CreateTaskUI(get(), get<UserCache>(), get(), get()) }
single { AssignTaskUI(get(), get(), get(), get()) }
single { DeleteTaskUI(get(), get(), get(),get()) }
single { GetTasksByProjectIdUI(get(), get(), get()) }
Expand All @@ -32,9 +36,11 @@ val uiModule = module {
single { GetAllProjectsUi(get(),get()) }
single { GetProjectByIdUi(get(),get(),get()) }
single { UpdateProjectUi(get(),get(),get(),get(),get()) }
single { AuditByProjectUI(get(), get(), get(), get()) }
single { AuditByTaskUI(get(), get(), get(), get(), get()) }
single { AuditByUserUI(get(), get(), get()) }


/* aggregated main menu */
single {
MainMenuUI(
runners = listOf(
Expand All @@ -46,7 +52,6 @@ val uiModule = module {
get<ChangeTaskStateUI>(),
get<GetTaskByIdUI>(),

get<AuthenticateUserUi>(),
get<CreationOfMateUi>(),
get<FetchAllUsersUI>(),
get<GettingUsersLoggedInUI>(),
Expand All @@ -57,9 +62,14 @@ val uiModule = module {
get<GetAllProjectsUi>(),
get<GetProjectByIdUi>(),
get<UpdateProjectUi>(),

get<AuditByTaskUI>(),
get<AuditByProjectUI>()
),
viewer = get(),
reader = get()
reader = get(),
authUi = get<AuthenticateUserUi>(),
userCache=get<UserCache>()
)
}
}
27 changes: 14 additions & 13 deletions src/main/kotlin/di/useCaseModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,39 +4,40 @@ import com.berlin.domain.usecase.auditSystem.AddAuditLogUseCase
import com.berlin.domain.usecase.auditSystem.GetAuditLogsByProjectIdUseCase
import com.berlin.domain.usecase.auditSystem.GetAuditLogsByTaskIdUseCase
import com.berlin.domain.usecase.auditSystem.GetAuditLogsByUserIdUseCase
import com.berlin.domain.usecase.authService.CreationOfMateUseCase
import com.berlin.domain.usecase.authService.CreateMateUseCase
import com.berlin.domain.usecase.authService.FetchAllUsersUseCase
import com.berlin.domain.usecase.authService.GetUserByIDUseCase
import com.berlin.domain.usecase.authService.GettingUsersLoggedInUseCase
import com.berlin.domain.usecase.authService.GetUserLoggedInUseCase
import com.berlin.domain.usecase.project.*
import com.berlin.domain.usecase.task.*
import data.UserCache
import domain.usecase.authService.AuthenticateUserUseCase
import org.koin.dsl.module

val useCaseModule = module {
single { CreateTaskUseCase(get(), get()) }
single { AssignTaskUseCase(get()) }
single { DeleteTaskUseCase(get()) }
single { CreateTaskUseCase(get(), get(), get()) }
single { AssignTaskUseCase(get(), get(), get<UserCache>()) }
single { DeleteTaskUseCase(get(), get(), get<UserCache>()) }
single { GetTasksByProjectUseCase(get()) }
single { UpdateTaskUseCase(get()) }
single { ChangeTaskStateUseCase(get()) }
single { UpdateTaskUseCase(get(), get(), get<UserCache>()) }
single { ChangeTaskStateUseCase(get(), get(), get<UserCache>()) }
single { GetTaskByIdUseCase(get()) }
single { GetAllTasksUseCase(get()) }

single { CreateProjectUseCase(get(), get()) }
single { CreateProjectUseCase(get(), get(), get(), get<UserCache>()) }
single { GetAllProjectsUseCase(get()) }
single { DeleteProjectUseCase(get()) }
single { DeleteProjectUseCase(get(), get(), get<UserCache>()) }
single { GetProjectByIdUseCase(get()) }
single { UpdateProjectUseCase(get()) }
single { UpdateProjectUseCase(get(), get(), get<UserCache>() ) }

single { AddAuditLogUseCase(get(), get()) }
single { GetAuditLogsByProjectIdUseCase(get()) }
single { GetAuditLogsByTaskIdUseCase(get()) }
single { GetAuditLogsByUserIdUseCase(get()) }

single { GetUserByIDUseCase(get()) }
single { GettingUsersLoggedInUseCase(get()) }
single { GetUserLoggedInUseCase(get()) }
single { FetchAllUsersUseCase(get()) }
single { AuthenticateUserUseCase(get(), get()) }
single { CreationOfMateUseCase(get(), get(), get()) }
single { AuthenticateUserUseCase(get(),get(), get()) }
single { CreateMateUseCase(get(), get(), get()) }
}
Loading
Loading