Skip to content

Commit e360d53

Browse files
authored
Merge pull request #18 from Task-Tracker-Systems/SQLite
Sq lite
2 parents 1f1e97d + 3c92957 commit e360d53

File tree

21 files changed

+321
-104
lines changed

21 files changed

+321
-104
lines changed

.github/workflows/build.yml

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,29 +30,39 @@ jobs:
3030
distribution: 'temurin'
3131
- name: Setup Gradle
3232
uses: gradle/gradle-build-action@v2
33-
- name: Build with Gradle
33+
- name: Set Gradle executable
34+
run: chmod +x gradlew
35+
- name: Compile Task-Tracker-Entities
3436
run: |
35-
chmod +x gradlew &&
36-
3737
cd Task-Tracker-Entities &&
3838
ln -s ../gradle &&
3939
ln -s ../gradlew &&
4040
./gradlew check &&
4141
./gradlew publishToMavenLocal
42-
43-
cd ../Task-Tracker-Entities-Impl &&
42+
- name: Compile Task-Tracker-Entities-Impl
43+
run: |
44+
cd Task-Tracker-Entities-Impl &&
4445
ln -s ../gradle &&
4546
ln -s ../gradlew &&
4647
./gradlew check &&
4748
./gradlew publishToMavenLocal
48-
49-
cd ../Task-Tracker-Usecases &&
49+
- name: Compile Task-Tracker-Usecases
50+
run: |
51+
cd Task-Tracker-Usecases &&
5052
ln -s ../gradle &&
5153
ln -s ../gradlew &&
5254
./gradlew check &&
53-
./gradlew publishToMavenLocal &&
54-
55-
cd ../Task-Tracker-CLI &&
55+
./gradlew publishToMavenLocal
56+
- name: Compile Task-Tracker-Usecases-SQLite-Impl
57+
run: |
58+
cd Task-Tracker-Usecases-SQLite-Impl &&
59+
ln -s ../gradle &&
60+
ln -s ../gradlew &&
61+
./gradlew check &&
62+
./gradlew publishToMavenLocal
63+
- name: Compile Task-Tracker-Usecases-CLI
64+
run: |
65+
cd Task-Tracker-CLI &&
5666
ln -s ../gradle &&
5767
ln -s ../gradlew &&
5868
./gradlew check &&

Task-Tracker-CLI/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ dependencies {
1919
implementation("com.garbereder.tasktracker.usecases:Task-Tracker-Usecases:1.0-SNAPSHOT")
2020
implementation("com.garbereder.tasktracker.entities:Task-Tracker-Entities:1.0-SNAPSHOT")
2121
implementation("com.garbereder.tasktracker.entities-impl:Task-Tracker-Entities-Impl:1.0-SNAPSHOT")
22+
implementation("com.garbereder.tasktracker.usecases.sqlite:Task-Tracker-Usecases-SQLite-Impl:1.0-SNAPSHOT")
2223
}
2324

2425
tasks.test {

Task-Tracker-CLI/gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
kotlin.code.style=official
1+
kotlin.code.style=official
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import com.garbereder.tasktracker.entities.ActivityCollection
2+
import com.garbereder.tasktracker.entities.ActivityCollectionImpl
3+
import com.garbereder.tasktracker.entities.Task
4+
import com.garbereder.tasktracker.entities.TaskCollection
5+
import com.garbereder.tasktracker.usecases.tasks.*
6+
import com.github.kinquirer.KInquirer
7+
import com.github.kinquirer.components.promptInput
8+
import com.github.kinquirer.components.promptList
9+
import kotlin.system.exitProcess
10+
11+
class CLI(private val taskCollectionReaderFactory: TaskCollectionReaderFactory) {
12+
companion object {
13+
val back = "Return"
14+
15+
fun addTask(tasks: TaskCollection): () -> Unit = {
16+
val taskName = KInquirer.promptInput("Task name:")
17+
if (taskName == back) {
18+
println("Illegal Task Name")
19+
} else {
20+
AddTask(tasks, taskName).invoke()
21+
}
22+
}
23+
24+
fun listActivities(activities: ActivityCollection): () -> Unit = {
25+
val actIt = activities.iterator()
26+
while (actIt.hasNext()) {
27+
println(actIt.next())
28+
}
29+
}
30+
31+
fun listTasks(activities: ActivityCollection, tasks: TaskCollection): () -> Unit = {
32+
val taskIterator = ListTasks(tasks).invoke()
33+
val taskList = mutableMapOf<String, Task>()
34+
while (taskIterator.hasNext()) {
35+
val task = taskIterator.next()
36+
taskList["$task.name (${task.id})"] = task
37+
}
38+
val options = taskList.keys.toMutableList()
39+
options.add(back)
40+
val selection: String = KInquirer.promptList("What do you want to start?", options)
41+
if (selection !== back) {
42+
val activity = StartActivity(taskList[selection]!!).invoke()
43+
activities.add(activity)
44+
KInquirer.promptInput("${activity.task} started at ${activity.start}. Finish now?")
45+
val stoppedActivity = StopActivity(activity).invoke()
46+
activities.add(stoppedActivity)
47+
activities.remove(activity)
48+
println("${stoppedActivity.task} started at ${stoppedActivity.start} and finished at ${stoppedActivity.end}")
49+
}
50+
}
51+
52+
val quit: () -> Unit = {
53+
exitProcess(0)
54+
}
55+
}
56+
57+
fun run() {
58+
59+
println("Welcome to Task-Tracker-CLI")
60+
val tasks = LoadTasks(taskCollectionReaderFactory.create()).invoke()
61+
62+
val activities = LoadActivities(object : ActivityCollectionReader {
63+
override fun read(): ActivityCollection = ActivityCollectionImpl()
64+
}).invoke()
65+
66+
val choices = mapOf(
67+
"AddTask" to addTask(tasks),
68+
"ListTask" to listTasks(activities, tasks),
69+
"ListActivities" to listActivities(activities),
70+
"Quit" to quit
71+
)
72+
while (true) {
73+
val selection: String = KInquirer.promptList("What do you want to do?", choices.keys.toList())
74+
choices[selection]!!.invoke()
75+
}
76+
}
77+
}
Lines changed: 3 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,6 @@
1-
2-
import com.garbereder.tasktracker.entities.*
3-
import com.garbereder.tasktracker.usecases.tasks.*
4-
import com.github.kinquirer.KInquirer
5-
import com.github.kinquirer.components.promptConfirm
6-
import com.github.kinquirer.components.promptInput
7-
import com.github.kinquirer.components.promptList
8-
import kotlin.system.exitProcess
1+
import com.garbereder.tasktracker.usecases.DBTaskCollectionReaderFactory
92

103
fun main() {
11-
println("Welcome to Task-Tracker-CLI")
12-
val tasks = LoadTasks(object : TaskCollectionReader {
13-
override fun read(): TaskCollection = TaskCollectionImpl()
14-
}).invoke()
15-
16-
val activities = LoadActivities(object : ActivityCollectionReader {
17-
override fun read(): ActivityCollection = ActivityCollectionImpl()
18-
}).invoke()
19-
20-
val addTask: () -> Unit = {
21-
val taskName = KInquirer.promptInput("Task name:")
22-
AddTask(tasks, taskName).invoke()
23-
}
24-
25-
val listTasks: () -> Unit = {
26-
val taskIterator = ListTasks(tasks).invoke()
27-
val taskList = mutableMapOf<String, Task>()
28-
while (taskIterator.hasNext()) {
29-
val task = taskIterator.next()
30-
taskList[task.name] = task
31-
}
32-
val selection: String = KInquirer.promptList("What do you want to start?", taskList.keys.toList())
33-
val activity = StartActivity(taskList[selection]!!).invoke()
34-
activities.add(activity)
35-
val stop = KInquirer.promptConfirm("${activity.task} started at ${activity.start}. Finish now?")
36-
if (stop) {
37-
val stoppedActivity = StopActivity(activity).invoke()
38-
activities.add(stoppedActivity)
39-
activities.remove(activity)
40-
println("${stoppedActivity.task} started at ${stoppedActivity.start} and finished at ${stoppedActivity.end}")
41-
}
42-
}
43-
44-
val listActivities: () -> Unit = {
45-
val actIt = activities.iterator()
46-
while (actIt.hasNext()) {
47-
println(actIt.next())
48-
}
49-
}
50-
51-
val quit: () -> Unit = {
52-
exitProcess(0)
53-
}
54-
55-
val choices = mapOf(
56-
"AddTask" to addTask,
57-
"ListTask" to listTasks,
58-
"ListActivities" to listActivities,
59-
"Quit" to quit
60-
)
61-
while (true) {
62-
val selection: String = KInquirer.promptList("What do you want to do?", choices.keys.toList())
63-
choices[selection]!!.invoke()
64-
}
4+
CLI(DBTaskCollectionReaderFactory()).run()
5+
}
656

66-
}

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,6 @@ repositories {
1212
}
1313

1414
kotlin {
15-
sourceSets {
16-
val commonMain by getting {
17-
dependencies {
18-
implementation("com.garbereder.tasktracker.entities:Task-Tracker-Entities:1.0-SNAPSHOT")
19-
}
20-
}
21-
}
2215
jvm {
2316
jvmToolchain(17)
2417
withJava()
@@ -44,7 +37,11 @@ kotlin {
4437
}
4538

4639
sourceSets {
47-
val commonMain by getting
40+
val commonMain by getting {
41+
dependencies {
42+
implementation("com.garbereder.tasktracker.entities:Task-Tracker-Entities:1.0-SNAPSHOT")
43+
}
44+
}
4845
val commonTest by getting {
4946
dependencies {
5047
implementation(kotlin("test"))

Task-Tracker-Entities/build.gradle.kts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,6 @@ repositories {
1111
}
1212

1313
kotlin {
14-
sourceSets {
15-
val commonMain by getting {
16-
dependencies {
17-
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0")
18-
}
19-
}
20-
}
2114
jvm {
2215
jvmToolchain(17)
2316
withJava()
@@ -44,7 +37,11 @@ kotlin {
4437

4538

4639
sourceSets {
47-
val commonMain by getting
40+
val commonMain by getting {
41+
dependencies {
42+
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0")
43+
}
44+
}
4845
val commonTest by getting {
4946
dependencies {
5047
implementation(kotlin("test"))
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
plugins {
2+
kotlin("multiplatform") version "1.8.22"
3+
id("maven-publish")
4+
id("app.cash.sqldelight") version "2.0.0-rc01"
5+
}
6+
7+
group = "com.garbereder.tasktracker.usecases.sqlite"
8+
version = "1.0-SNAPSHOT"
9+
10+
repositories {
11+
mavenLocal()
12+
mavenCentral()
13+
}
14+
15+
sqldelight {
16+
databases {
17+
create("Database") {
18+
packageName.set("com.garbereder.tasktracker.usecases.sqlite")
19+
}
20+
}
21+
}
22+
23+
kotlin {
24+
jvm {
25+
jvmToolchain(17)
26+
withJava()
27+
testRuns["test"].executionTask.configure {
28+
useJUnitPlatform()
29+
}
30+
}
31+
val hostOs = System.getProperty("os.name")
32+
val isMingwX64 = hostOs.startsWith("Windows")
33+
val nativeTarget = when {
34+
hostOs == "Mac OS X" -> macosX64("native")
35+
hostOs == "Linux" -> linuxX64("native")
36+
isMingwX64 -> mingwX64("native")
37+
else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
38+
}
39+
40+
41+
sourceSets {
42+
val commonMain by getting {
43+
dependencies {
44+
implementation("com.garbereder.tasktracker.usecases:Task-Tracker-Usecases:1.0-SNAPSHOT")
45+
implementation("com.garbereder.tasktracker.entities:Task-Tracker-Entities:1.0-SNAPSHOT")
46+
implementation("com.garbereder.tasktracker.entities-impl:Task-Tracker-Entities-Impl:1.0-SNAPSHOT")
47+
}
48+
}
49+
val commonTest by getting {
50+
dependencies {
51+
implementation(kotlin("test"))
52+
}
53+
}
54+
val jvmMain by getting{
55+
dependencies {
56+
implementation("app.cash.sqldelight:sqlite-driver:2.0.0-rc01")
57+
}
58+
}
59+
val jvmTest by getting
60+
val nativeMain by getting {
61+
dependencies {
62+
implementation("app.cash.sqldelight:native-driver:2.0.0-rc01")
63+
}
64+
}
65+
val nativeTest by getting
66+
}
67+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
kotlin.code.style=official
2+
kotlin.js.compiler=ir
3+
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=4096m
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
rootProject.name = "Task-Tracker-Usecases-SQLite-Impl"
3+

0 commit comments

Comments
 (0)