1- import com.garbereder.tasktracker.entities.ActivityCollection
2- import com.garbereder.tasktracker.entities.ActivityCollectionImpl
1+ import com.garbereder.tasktracker.entities.DuplicateTaskException
32import 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
125import com.garbereder.tasktracker.usecases.tasks.TaskCollectionReaderFactory
6+ import com.garbereder.tasktracker.usecases.tasks.TaskUseCases
137import com.github.kinquirer.KInquirer
8+ import com.github.kinquirer.components.promptConfirm
149import com.github.kinquirer.components.promptInput
1510import com.github.kinquirer.components.promptList
11+ import kotlinx.datetime.Clock
1612import 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 ) {
0 commit comments