diff --git a/api/src/NotesApplication.kt b/api/src/NotesApplication.kt index 5d3d97f..7f5c1bf 100644 --- a/api/src/NotesApplication.kt +++ b/api/src/NotesApplication.kt @@ -7,6 +7,7 @@ import be.vandewalleh.features.configurationFeature import be.vandewalleh.features.configurationModule import be.vandewalleh.features.features import be.vandewalleh.migrations.Migration +import be.vandewalleh.services.serviceModule import io.ktor.application.Application import io.ktor.application.log import io.ktor.auth.authenticate @@ -29,6 +30,7 @@ fun Application.module() { kodein = Kodein { import(controllerModule) import(configurationModule) + import(serviceModule) bind() with singleton { Migration(this.kodein) } bind() with singleton { Database.Companion.connect(this.instance()) } diff --git a/api/src/controllers/ChaptersController.kt b/api/src/controllers/ChaptersController.kt index ceb409b..54ff772 100644 --- a/api/src/controllers/ChaptersController.kt +++ b/api/src/controllers/ChaptersController.kt @@ -76,12 +76,11 @@ class ChaptersController(kodein: Kodein) : AuthCrudController("/notes/{noteTitle val chapterNumber = call.chapterNumber() ?:return@post call.respondStatus(HttpStatusCode.BadRequest) - val exists = + val exists = false val (title, content) = call.receive() - if() } } diff --git a/api/src/services/NotesService.kt b/api/src/services/NotesService.kt new file mode 100644 index 0000000..43eed75 --- /dev/null +++ b/api/src/services/NotesService.kt @@ -0,0 +1,47 @@ +package be.vandewalleh.services + +import be.vandewalleh.tables.Notes +import be.vandewalleh.tables.Tags +import me.liuwj.ktorm.database.Database +import me.liuwj.ktorm.dsl.* +import org.kodein.di.Kodein +import org.kodein.di.KodeinAware +import org.kodein.di.generic.instance +import java.time.format.DateTimeFormatter + +/** + * service to handle database queries at the Notes level. + */ +class NotesService(override val kodein: Kodein) : KodeinAware { + val db by instance() + + /** + * returns a list of [NotesDTO] associated with the userId + */ + fun getNotes(userId: Int): List { + val notes = db.from(Notes) + .select(Notes.id, Notes.title, Notes.updatedAt) + .where { Notes.userId eq userId } + .orderBy(Notes.updatedAt.desc()) + .map { row -> + Notes.createEntity(row) + } + .toList() + + return notes.map { note -> + val tags = db.from(Tags) + .select(Tags.name) + .where { Tags.noteId eq note.id } + .map { it[Tags.name]!! } + .toList() + + val updatedAt = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(note.updatedAt) + + NotesDTO(note.title, tags, updatedAt) + } + + } + +} + +data class NotesDTO(val title: String, val tags: List, val updatedAt: String) \ No newline at end of file diff --git a/api/src/services/Services.kt b/api/src/services/Services.kt new file mode 100644 index 0000000..fdb698c --- /dev/null +++ b/api/src/services/Services.kt @@ -0,0 +1,13 @@ +package be.vandewalleh.services + +import org.kodein.di.Kodein +import org.kodein.di.generic.bind +import org.kodein.di.generic.singleton + + +/** + * [Kodein] controller module containing the app services + */ +val serviceModule = Kodein.Module(name = "Services") { + bind() with singleton { NotesService(this.kodein) } +} \ No newline at end of file diff --git a/api/src/services/UserService.kt b/api/src/services/UserService.kt new file mode 100644 index 0000000..59dd579 --- /dev/null +++ b/api/src/services/UserService.kt @@ -0,0 +1,28 @@ +package be.vandewalleh.services + +import be.vandewalleh.tables.Users +import me.liuwj.ktorm.database.Database +import me.liuwj.ktorm.dsl.* +import org.kodein.di.Kodein +import org.kodein.di.KodeinAware +import org.kodein.di.generic.instance + +/** + * service to handle database queries for users. + */ +class UserService(override val kodein: Kodein) : KodeinAware { + private val db by instance() + + /** + * returns a user ID if present or null + */ + fun getUserId(userEmail: String): Int? { + return db.from(Users) + .select(Users.id) + .where { Users.email eq userEmail } + .limit(0, 1) + .map { it[Users.id] } + .firstOrNull() + } + +} \ No newline at end of file