Skip to content

Commit 48a7505

Browse files
authored
Merge pull request #27 from Task-Tracker-Systems/usecase-separation2
Refactor usecases and streamline database interaction
2 parents 508d1c8 + e40d050 commit 48a7505

File tree

51 files changed

+321
-425
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+321
-425
lines changed

.github/workflows/build.yml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,6 @@ jobs:
3939
ln -s ../gradlew &&
4040
./gradlew check &&
4141
./gradlew publishToMavenLocal
42-
- name: Compile Task-Tracker-Entities-Impl
43-
run: |
44-
cd Task-Tracker-Entities-Impl &&
45-
ln -s ../gradle &&
46-
ln -s ../gradlew &&
47-
./gradlew check &&
48-
./gradlew publishToMavenLocal
4942
- name: Compile Task-Tracker-Usecases
5043
run: |
5144
cd Task-Tracker-Usecases &&

Task-Tracker-CLI/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ dependencies {
1919
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0")
2020
implementation("com.garbereder.tasktracker.usecases:Task-Tracker-Usecases:1.0-SNAPSHOT")
2121
implementation("com.garbereder.tasktracker.entities:Task-Tracker-Entities:1.0-SNAPSHOT")
22-
implementation("com.garbereder.tasktracker.entities-impl:Task-Tracker-Entities-Impl:1.0-SNAPSHOT")
2322
implementation("com.garbereder.tasktracker.usecases.sqlite:Task-Tracker-Usecases-SQLite-Impl:1.0-SNAPSHOT")
2423
}
2524

Task-Tracker-CLI/src/main/kotlin/CLI.kt

Lines changed: 50 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,76 @@
1-
import com.garbereder.tasktracker.entities.ActivityCollection
2-
import com.garbereder.tasktracker.entities.ActivityCollectionImpl
1+
import com.garbereder.tasktracker.entities.DuplicateTaskException
32
import com.garbereder.tasktracker.entities.Task
4-
import com.garbereder.tasktracker.entities.TaskCollection
5-
import com.garbereder.tasktracker.usecases.activities.ActivityCollectionReader
6-
import com.garbereder.tasktracker.usecases.activities.LoadActivities
7-
import com.garbereder.tasktracker.usecases.activities.StartActivity
8-
import com.garbereder.tasktracker.usecases.activities.StopActivity
9-
import com.garbereder.tasktracker.usecases.tasks.AddTask
10-
import com.garbereder.tasktracker.usecases.tasks.ListTasks
11-
import com.garbereder.tasktracker.usecases.tasks.LoadTasks
3+
import com.garbereder.tasktracker.usecases.activities.ActivityCollectionReaderFactory
4+
import com.garbereder.tasktracker.usecases.activities.ActivityUseCases
125
import com.garbereder.tasktracker.usecases.tasks.TaskCollectionReaderFactory
6+
import com.garbereder.tasktracker.usecases.tasks.TaskUseCases
137
import com.github.kinquirer.KInquirer
8+
import com.github.kinquirer.components.promptConfirm
149
import com.github.kinquirer.components.promptInput
1510
import com.github.kinquirer.components.promptList
11+
import kotlinx.datetime.Clock
1612
import kotlin.system.exitProcess
1713

18-
class CLI(private val taskCollectionReaderFactory: TaskCollectionReaderFactory) {
14+
class CLI(
15+
private val taskCollectionReaderFactory: TaskCollectionReaderFactory,
16+
private val activityCollectionReaderFactory: ActivityCollectionReaderFactory
17+
) {
1918
companion object {
2019
val back = "Return"
2120

22-
fun addTask(tasks: TaskCollection): () -> Unit = {
21+
fun addTask(taskUseCases: TaskUseCases): () -> Unit = {
2322
val taskName = KInquirer.promptInput("Task name:")
2423
if (taskName == back) {
2524
println("Illegal Task Name")
2625
} else {
27-
AddTask(tasks, taskName).invoke()
26+
try {
27+
taskUseCases.createAddTask(taskName).invoke()
28+
} catch (e: DuplicateTaskException) {
29+
println(e.message)
30+
}
2831
}
2932
}
3033

31-
fun listActivities(activities: ActivityCollection): () -> Unit = {
32-
val actIt = activities.iterator()
34+
fun listActivities(activityUseCases: ActivityUseCases): () -> Unit = {
35+
val actIt = activityUseCases.createListActivity().invoke()
3336
while (actIt.hasNext()) {
3437
println(actIt.next())
3538
}
3639
}
3740

38-
fun listTasks(activities: ActivityCollection, tasks: TaskCollection): () -> Unit = {
39-
val taskIterator = ListTasks(tasks).invoke()
41+
fun listTasks(activityUseCases: ActivityUseCases, taskUseCases: TaskUseCases): () -> Unit = {
42+
val taskIterator = taskUseCases.createListTasks().invoke()
4043
val taskList = mutableMapOf<String, Task>()
4144
while (taskIterator.hasNext()) {
4245
val task = taskIterator.next()
43-
taskList["$task.name (${task.id})"] = task
46+
taskList[task.name] = task
4447
}
4548
val options = taskList.keys.toMutableList()
4649
options.add(back)
47-
val selection: String = KInquirer.promptList("What do you want to start?", options)
50+
val selection: String = KInquirer.promptList("Select a task:", options)
4851
if (selection !== back) {
49-
val activity = StartActivity(taskList[selection]!!).invoke()
50-
activities.add(activity)
51-
KInquirer.promptInput("${activity.task} started at ${activity.start}. Finish now?")
52-
val stoppedActivity = StopActivity(activity).invoke()
53-
activities.add(stoppedActivity)
54-
activities.remove(activity)
55-
println("${stoppedActivity.task} started at ${stoppedActivity.start} and finished at ${stoppedActivity.end}")
52+
val task = taskList[selection]!!
53+
when (KInquirer.promptList("What do you want ot do?", listOf("Start", "Delete"))) {
54+
"Start" -> {
55+
val activity = activityUseCases.createStartActivity(task).invoke()
56+
val start = Clock.System.now()
57+
KInquirer.promptInput("${activity.task} started. Finish now?")
58+
val stop = Clock.System.now()
59+
val duration = stop - start
60+
val stoppedActivity =
61+
activityUseCases.createStopActivity(activity, duration.inWholeSeconds).invoke()
62+
println("${stoppedActivity.task} started at $start and finished at $stop, tracked with ${stoppedActivity.durationInSeconds}s")
63+
}
64+
65+
"Delete" -> {
66+
val confirm = KInquirer.promptConfirm("Are you sure to delete $task")
67+
if (confirm) {
68+
taskUseCases.createRemoveTasks(task).invoke()
69+
activityUseCases.createRemoveActivities(task).invoke()
70+
println("$task was removed")
71+
}
72+
}
73+
}
5674
}
5775
}
5876

@@ -63,16 +81,14 @@ class CLI(private val taskCollectionReaderFactory: TaskCollectionReaderFactory)
6381

6482
fun run() {
6583
println("Welcome to Task-Tracker-CLI")
66-
val tasks = LoadTasks(taskCollectionReaderFactory.create()).invoke()
67-
68-
val activities = LoadActivities(object : ActivityCollectionReader {
69-
override fun read(): ActivityCollection = ActivityCollectionImpl()
70-
}).invoke()
84+
val useCases = TaskUseCases.createTaskUseCasesFromLoadTasks(taskCollectionReaderFactory.create()).invoke()
85+
val activityUseCases =
86+
ActivityUseCases.createActivityUseCasesFromLoadActivities(activityCollectionReaderFactory.create()).invoke()
7187

7288
val choices = mapOf(
73-
"AddTask" to addTask(tasks),
74-
"ListTask" to listTasks(activities, tasks),
75-
"ListActivities" to listActivities(activities),
89+
"AddTask" to addTask(useCases),
90+
"ListTask" to listTasks(activityUseCases, useCases),
91+
"ListActivities" to listActivities(activityUseCases),
7692
"Quit" to quit
7793
)
7894
while (true) {
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
import com.garbereder.tasktracker.usecases.DBTaskCollectionReaderFactory
1+
import com.garbereder.tasktracker.usecases.activities.DBActivityCollectionReaderFactory
2+
import com.garbereder.tasktracker.usecases.tasks.DBTaskCollectionReaderFactory
23

34
fun main() {
4-
CLI(DBTaskCollectionReaderFactory()).run()
5+
CLI(
6+
DBTaskCollectionReaderFactory(),
7+
DBActivityCollectionReaderFactory()
8+
).run()
59
}

Task-Tracker-Entities-Impl/build.gradle.kts

Lines changed: 0 additions & 58 deletions
This file was deleted.

Task-Tracker-Entities-Impl/gradle.properties

Lines changed: 0 additions & 2 deletions
This file was deleted.

Task-Tracker-Entities-Impl/settings.gradle.kts

Lines changed: 0 additions & 1 deletion
This file was deleted.

Task-Tracker-Entities-Impl/src/commonMain/kotlin/com/garbereder/tasktracker/entities/ActivityCollectionImpl.kt

Lines changed: 0 additions & 18 deletions
This file was deleted.

Task-Tracker-Entities-Impl/src/commonMain/kotlin/com/garbereder/tasktracker/entities/TaskCollectionImpl.kt

Lines changed: 0 additions & 23 deletions
This file was deleted.

Task-Tracker-Entities-Impl/src/commonTest/kotlin/com/garbereder/tasktracker/entities/TaskCollectionImplTests.kt

Lines changed: 0 additions & 99 deletions
This file was deleted.

0 commit comments

Comments
 (0)