Add Read note
This commit is contained in:
parent
142b94722e
commit
e6bfe37b35
@ -2,6 +2,8 @@ package be.vandewalleh.controllers
|
|||||||
|
|
||||||
import be.vandewalleh.entities.Note
|
import be.vandewalleh.entities.Note
|
||||||
import be.vandewalleh.entities.Tag
|
import be.vandewalleh.entities.Tag
|
||||||
|
import be.vandewalleh.entities.User
|
||||||
|
import be.vandewalleh.tables.Chapters
|
||||||
import be.vandewalleh.tables.Notes
|
import be.vandewalleh.tables.Notes
|
||||||
import be.vandewalleh.tables.Tags
|
import be.vandewalleh.tables.Tags
|
||||||
import be.vandewalleh.tables.Users
|
import be.vandewalleh.tables.Users
|
||||||
@ -11,9 +13,10 @@ import io.ktor.http.HttpStatusCode
|
|||||||
import io.ktor.request.receive
|
import io.ktor.request.receive
|
||||||
import io.ktor.response.respond
|
import io.ktor.response.respond
|
||||||
import io.ktor.routing.Route
|
import io.ktor.routing.Route
|
||||||
|
import io.ktor.routing.get
|
||||||
import io.ktor.routing.post
|
import io.ktor.routing.post
|
||||||
import me.liuwj.ktorm.database.Database
|
import me.liuwj.ktorm.database.Database
|
||||||
import me.liuwj.ktorm.dsl.eq
|
import me.liuwj.ktorm.dsl.*
|
||||||
import me.liuwj.ktorm.entity.*
|
import me.liuwj.ktorm.entity.*
|
||||||
import org.kodein.di.Kodein
|
import org.kodein.di.Kodein
|
||||||
import org.kodein.di.generic.instance
|
import org.kodein.di.generic.instance
|
||||||
@ -26,15 +29,23 @@ class NotesTitleController(kodein: Kodein) : AuthCrudController("/notes/{noteTit
|
|||||||
return this.parameters["noteTitle"]!!
|
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 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 = {
|
override val route: Route.() -> Unit = {
|
||||||
post {
|
post {
|
||||||
val title = call.noteTitle() ?: error("")
|
val title = call.noteTitle() ?: error("")
|
||||||
val tags = call.receive<PostRequestBody>().tags
|
val tags = call.receive<PostRequestBody>().tags
|
||||||
|
|
||||||
val user = db.sequenceOf(Users)
|
val user = call.user()
|
||||||
.find { it.email eq call.userEmail() } ?: error("")
|
|
||||||
|
|
||||||
val exists = db.sequenceOf(Notes)
|
val exists = db.sequenceOf(Notes)
|
||||||
.filter { it.userId eq user.id }
|
.filter { it.userId eq user.id }
|
||||||
@ -66,5 +77,35 @@ class NotesTitleController(kodein: Kodein) : AuthCrudController("/notes/{noteTit
|
|||||||
|
|
||||||
call.respondStatus(HttpStatusCode.Created)
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user