From d6f2489d505997cf4b1b5c9d7b9e977f2aee21df Mon Sep 17 00:00:00 2001 From: Hubert Van De Walle Date: Mon, 20 Apr 2020 15:44:44 +0200 Subject: [PATCH] Change NotesController to use services --- api/src/controllers/AuthCrudController.kt | 7 ++++ api/src/controllers/NotesController.kt | 48 +++-------------------- 2 files changed, 12 insertions(+), 43 deletions(-) diff --git a/api/src/controllers/AuthCrudController.kt b/api/src/controllers/AuthCrudController.kt index ba57567..8aa7875 100644 --- a/api/src/controllers/AuthCrudController.kt +++ b/api/src/controllers/AuthCrudController.kt @@ -1,5 +1,6 @@ package be.vandewalleh.controllers +import be.vandewalleh.services.UserService import io.ktor.application.ApplicationCall import io.ktor.auth.UserIdPrincipal import io.ktor.auth.authenticate @@ -8,6 +9,7 @@ import io.ktor.routing.Route import io.ktor.routing.Routing import io.ktor.routing.route import org.kodein.di.Kodein +import org.kodein.di.generic.instance abstract class AuthCrudController( private val path: String, @@ -17,9 +19,14 @@ abstract class AuthCrudController( abstract val route: Route.() -> Unit + private val userService by instance() + fun ApplicationCall.userEmail(): String = this.principal()!!.name + fun ApplicationCall.userId(): Int = + userService.getUserId(userEmail())!! + override fun Routing.registerRoutes() { authenticate { route(path) { diff --git a/api/src/controllers/NotesController.kt b/api/src/controllers/NotesController.kt index 99dc7ec..d9a92a5 100644 --- a/api/src/controllers/NotesController.kt +++ b/api/src/controllers/NotesController.kt @@ -1,59 +1,21 @@ package be.vandewalleh.controllers -import be.vandewalleh.tables.Notes -import be.vandewalleh.tables.Tags -import be.vandewalleh.tables.Users +import be.vandewalleh.services.NotesService import io.ktor.application.call import io.ktor.response.respond -import io.ktor.response.respondText import io.ktor.routing.Route import io.ktor.routing.get -import me.liuwj.ktorm.database.Database -import me.liuwj.ktorm.dsl.* import org.kodein.di.Kodein import org.kodein.di.generic.instance -import java.time.LocalDateTime -import java.time.format.DateTimeFormatter class NotesController(kodein: Kodein) : AuthCrudController("/notes", kodein) { - private val db by kodein.instance() - - private class ResponseItem(val title: String, val tags: List, val updatedAt: String) + private val notesService by kodein.instance() override val route: Route.() -> Unit = { get { - val email = call.userEmail() - - val list = db.from(Notes) - .leftJoin(Users, on = Users.id eq Notes.userId) - .select(Notes.id, Notes.title, Notes.updatedAt) - .where { Users.email eq email } - .orderBy(Notes.updatedAt.desc()) - .map { row -> - Notes.createEntity(row) - } - .toList() - - val response = mutableListOf() - - list.forEach { 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) - - val item = ResponseItem( - title = note.title, - tags = tags, - updatedAt = updatedAt - ) - response += item - } - - call.respond(response) + val userId = call.userId() + val notes = notesService.getNotes(userId) + call.respond(notes) } } }