1
- import com.garbereder.tasktracker.entities.ActivityCollection
2
- import com.garbereder.tasktracker.entities.ActivityCollectionImpl
1
+ import com.garbereder.tasktracker.entities.DuplicateTaskException
3
2
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
12
5
import com.garbereder.tasktracker.usecases.tasks.TaskCollectionReaderFactory
6
+ import com.garbereder.tasktracker.usecases.tasks.TaskUseCases
13
7
import com.github.kinquirer.KInquirer
8
+ import com.github.kinquirer.components.promptConfirm
14
9
import com.github.kinquirer.components.promptInput
15
10
import com.github.kinquirer.components.promptList
11
+ import kotlinx.datetime.Clock
16
12
import kotlin.system.exitProcess
17
13
18
- class CLI (private val taskCollectionReaderFactory : TaskCollectionReaderFactory ) {
14
+ class CLI (
15
+ private val taskCollectionReaderFactory : TaskCollectionReaderFactory ,
16
+ private val activityCollectionReaderFactory : ActivityCollectionReaderFactory
17
+ ) {
19
18
companion object {
20
19
val back = " Return"
21
20
22
- fun addTask (tasks : TaskCollection ): () -> Unit = {
21
+ fun addTask (taskUseCases : TaskUseCases ): () -> Unit = {
23
22
val taskName = KInquirer .promptInput(" Task name:" )
24
23
if (taskName == back) {
25
24
println (" Illegal Task Name" )
26
25
} else {
27
- AddTask (tasks, taskName).invoke()
26
+ try {
27
+ taskUseCases.createAddTask(taskName).invoke()
28
+ } catch (e: DuplicateTaskException ) {
29
+ println (e.message)
30
+ }
28
31
}
29
32
}
30
33
31
- fun listActivities (activities : ActivityCollection ): () -> Unit = {
32
- val actIt = activities.iterator ()
34
+ fun listActivities (activityUseCases : ActivityUseCases ): () -> Unit = {
35
+ val actIt = activityUseCases.createListActivity().invoke ()
33
36
while (actIt.hasNext()) {
34
37
println (actIt.next())
35
38
}
36
39
}
37
40
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()
40
43
val taskList = mutableMapOf<String , Task >()
41
44
while (taskIterator.hasNext()) {
42
45
val task = taskIterator.next()
43
- taskList[" $ task .name ( ${task.id} ) " ] = task
46
+ taskList[task.name] = task
44
47
}
45
48
val options = taskList.keys.toMutableList()
46
49
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)
48
51
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
+ }
56
74
}
57
75
}
58
76
@@ -63,16 +81,14 @@ class CLI(private val taskCollectionReaderFactory: TaskCollectionReaderFactory)
63
81
64
82
fun run () {
65
83
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()
71
87
72
88
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 ),
76
92
" Quit" to quit
77
93
)
78
94
while (true ) {
0 commit comments