Add Read note

This commit is contained in:
Hubert Van De Walle 2020-04-20 00:12:15 +02:00
parent 142b94722e
commit e6bfe37b35

View File

@ -2,6 +2,8 @@ package be.vandewalleh.controllers
import be.vandewalleh.entities.Note
import be.vandewalleh.entities.Tag
import be.vandewalleh.entities.User
import be.vandewalleh.tables.Chapters
import be.vandewalleh.tables.Notes
import be.vandewalleh.tables.Tags
import be.vandewalleh.tables.Users
@ -11,9 +13,10 @@ import io.ktor.http.HttpStatusCode
import io.ktor.request.receive
import io.ktor.response.respond
import io.ktor.routing.Route
import io.ktor.routing.get
import io.ktor.routing.post
import me.liuwj.ktorm.database.Database
import me.liuwj.ktorm.dsl.eq
import me.liuwj.ktorm.dsl.*
import me.liuwj.ktorm.entity.*
import org.kodein.di.Kodein
import org.kodein.di.generic.instance
@ -26,15 +29,23 @@ class NotesTitleController(kodein: Kodein) : AuthCrudController("/notes/{noteTit
return this.parameters["noteTitle"]!!
}
private fun ApplicationCall.user(): User {
return db.sequenceOf(Users)
.find { it.email eq this.userEmail() }
?: error("")
}
private class PostRequestBody(val tags: List<String>)
private class ChapterDto(val title: String, val content: String)
private class GetResponseBody(val tags: List<String>, val chapters: List<ChapterDto>)
override val route: Route.() -> Unit = {
post {
val title = call.noteTitle() ?: error("")
val tags = call.receive<PostRequestBody>().tags
val user = db.sequenceOf(Users)
.find { it.email eq call.userEmail() } ?: error("")
val user = call.user()
val exists = db.sequenceOf(Notes)
.filter { it.userId eq user.id }
@ -66,5 +77,35 @@ class NotesTitleController(kodein: Kodein) : AuthCrudController("/notes/{noteTit
call.respondStatus(HttpStatusCode.Created)
}
get {
val user = call.user()
val title = call.noteTitle() ?: error("title missing")
val noteId = db.from(Notes)
.select(Notes.id)
.where { Notes.userId eq user.id and (Notes.title eq title) }
.limit(0, 1)
.map { it[Notes.id]!! }
.firstOrNull()
?: return@get call.respondStatus(HttpStatusCode.NotFound)
val tags = db.from(Tags)
.select(Tags.name)
.where { Tags.noteId eq noteId }
.map { it[Tags.name]!! }
.toList()
val chapters = db.from(Chapters)
.select(Chapters.title, Chapters.content)
.where { Chapters.noteId eq noteId }
.orderBy(Chapters.number.asc())
.map { ChapterDto(it[Chapters.title]!!, it[Chapters.content]!!) }
.toList()
val response = GetResponseBody(tags, chapters)
call.respond(response)
}
}
}