Skip to content

Commit 7a54644

Browse files
author
Gerrit Garbereder
committed
Entities Impl improvements
Better testability Fixed missing total_duration storage Extracted parameters for DB drivers Use interface for DB drivers Rename Task to PersistentTask to avoid name clashes
1 parent 7416a28 commit 7a54644

File tree

16 files changed

+223
-45
lines changed

16 files changed

+223
-45
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import com.garbereder.tasktracker.usecases.sqlite.DriverFactory
12
import com.garbereder.tasktracker.usecases.tasks.DBTaskCollectionReaderFactory
23

34
fun main() {
45
CLI(
5-
DBTaskCollectionReaderFactory()
6+
DBTaskCollectionReaderFactory(DriverFactory("jdbc:sqlite:tasktracker.sqlite"))
67
).run()
78
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package com.garbereder.tasktracker.usecases.sqlite
22

33
import app.cash.sqldelight.db.SqlDriver
4+
import com.garbereder.tasktracker.usecases.tasks.DBDriverFactory
45

5-
expect class DriverFactory {
6-
fun createDriver(): SqlDriver
6+
expect class DriverFactory : DBDriverFactory {
7+
override fun createDriver(): SqlDriver
78
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.garbereder.tasktracker.usecases.tasks
2+
3+
import app.cash.sqldelight.db.SqlDriver
4+
5+
interface DBDriverFactory {
6+
fun createDriver(): SqlDriver
7+
}

Task-Tracker-Usecases-SQLite-Impl/src/commonMain/kotlin/com/garbereder/tasktracker/usecases/tasks/DBTask.kt

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,26 @@ import com.garbereder.tasktracker.entities.Task
44
import com.garbereder.tasktracker.entities.TaskCollection
55
import com.garbereder.tasktracker.usecases.sqlite.Database
66

7-
class DBAwareTaskCollection(private val database: Database) :
7+
class DBTaskCollection(private val database: Database) :
88
TaskCollection {
99

10-
override fun add(task: Task) {
10+
override fun add(task: Task) =
1111
database.transaction {
12-
database.tasksQueries.insert(task.name)
12+
database.tasksQueries.insert(task.name, task.totalDuration)
1313
}
14-
}
1514

16-
override fun iterator(): Iterator<Task> = database.tasksQueries.selectAll().executeAsList().map { t -> Task(t.name, t.total_duration) }.iterator()
15+
override fun iterator(): Iterator<Task> =
16+
database.tasksQueries.selectAll().executeAsList().map { t -> Task(t.name, t.total_duration) }.iterator()
1717

18-
override fun remove(task: Task) {
18+
override fun remove(task: Task) =
1919
database.transaction {
2020
database.tasksQueries.deleteByName(task.name)
2121
}
22-
}
2322

24-
override fun replace(task: Task) {
23+
override fun replace(task: Task) =
2524
database.transaction {
2625
database.tasksQueries.setTotalDuration(task.totalDuration, task.name)
2726
}
28-
}
2927

3028
override fun size(): Int = database.tasksQueries.selectAll().executeAsList().count()
3129
}

Task-Tracker-Usecases-SQLite-Impl/src/commonMain/kotlin/com/garbereder/tasktracker/usecases/tasks/DBTaskCollectionReader.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@ package com.garbereder.tasktracker.usecases.tasks
22

33
import com.garbereder.tasktracker.entities.TaskCollection
44
import com.garbereder.tasktracker.usecases.sqlite.Database
5-
import com.garbereder.tasktracker.usecases.sqlite.DriverFactory
65

7-
class DBTaskCollectionReader internal constructor(private val driverFactory: DriverFactory) : TaskCollectionReader {
8-
override fun read(): TaskCollection {
9-
val database = Database(driverFactory.createDriver())
10-
return DBAwareTaskCollection(database)
11-
}
6+
class DBTaskCollectionReader internal constructor(private val driverFactory: DBDriverFactory) : TaskCollectionReader {
7+
override fun read(): TaskCollection = DBTaskCollection(Database(driverFactory.createDriver()))
128
}
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
1-
CREATE TABLE IF NOT EXISTS Task (
1+
CREATE TABLE IF NOT EXISTS PersistentTask (
22
id INTEGER PRIMARY KEY AUTOINCREMENT,
33
name TEXT NOT NULL,
44
total_duration INTEGER NOT NULL DEFAULT 0
55
);
66

77
selectAll:
88
SELECT *
9-
FROM Task;
9+
FROM PersistentTask
10+
ORDER BY name;
1011

1112
insert:
12-
INSERT INTO Task(name)
13-
VALUES (?);
13+
INSERT INTO PersistentTask(name, total_duration)
14+
VALUES (?, ?);
1415

1516
deleteByName:
16-
DELETE FROM Task
17+
DELETE FROM PersistentTask
1718
WHERE name = ?;
1819

1920
setTotalDuration:
20-
UPDATE Task
21+
UPDATE PersistentTask
2122
SET total_duration = ?
2223
WHERE name = ?;

Task-Tracker-Usecases-SQLite-Impl/src/jvmMain/kotlin/com/garbereder/tasktracker/usecases/sqlite/DriverFactory.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@ package com.garbereder.tasktracker.usecases.sqlite
22

33
import app.cash.sqldelight.db.SqlDriver
44
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
5+
import com.garbereder.tasktracker.usecases.tasks.DBDriverFactory
56

6-
actual class DriverFactory {
7-
actual fun createDriver(): SqlDriver {
8-
val driver: SqlDriver = JdbcSqliteDriver("jdbc:sqlite:tasktracker.sqlite")
7+
actual class DriverFactory(private val url: String) : DBDriverFactory {
8+
actual override fun createDriver(): SqlDriver =
9+
JdbcSqliteDriver(url)
910
.apply {
1011
Database.Schema.create(this)
1112
}
12-
return driver
13-
}
1413
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.garbereder.tasktracker.usecases.tasks
22

3-
import com.garbereder.tasktracker.usecases.sqlite.DriverFactory
4-
5-
actual class DBTaskCollectionReaderFactory : TaskCollectionReaderFactory {
6-
actual override fun create(): TaskCollectionReader = DBTaskCollectionReader(DriverFactory())
3+
actual class DBTaskCollectionReaderFactory(private val factory: DBDriverFactory) : TaskCollectionReaderFactory {
4+
actual override fun create(): TaskCollectionReader = DBTaskCollectionReader(factory)
5+
// DriverFactory("jdbc:sqlite:tasktracker.sqlite")
76
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.garbereder.tasktracker.usecases.sqlite
2+
3+
import app.cash.sqldelight.db.SqlDriver
4+
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
5+
import com.garbereder.tasktracker.usecases.tasks.DBDriverFactory
6+
7+
class InMemoryDriverFactory : DBDriverFactory {
8+
override fun createDriver(): SqlDriver =
9+
JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY)
10+
.apply {
11+
Database.Schema.create(this)
12+
}
13+
}

0 commit comments

Comments
 (0)