Rework TermDao
This commit is contained in:
@@ -19,6 +19,7 @@ class TermDao(id: EntityID<Int>) : IntEntity(id) {
|
|||||||
var member by Terms.member
|
var member by Terms.member
|
||||||
var order2 by Terms.order2
|
var order2 by Terms.order2
|
||||||
var flags by Terms.flags
|
var flags by Terms.flags
|
||||||
|
var pronunciations by PronunciationDao via TermsPronunciations
|
||||||
|
|
||||||
fun toModel(): Term = Term(
|
fun toModel(): Term = Term(
|
||||||
id = id.value,
|
id = id.value,
|
||||||
@@ -41,6 +42,6 @@ class TermDao(id: EntityID<Int>) : IntEntity(id) {
|
|||||||
member = member,
|
member = member,
|
||||||
order2 = order2,
|
order2 = order2,
|
||||||
flags = flags,
|
flags = flags,
|
||||||
pronunciation = null
|
pronunciations = pronunciations.map { it.toModel() }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -29,5 +29,5 @@ data class TermFull(
|
|||||||
val member: String?,
|
val member: String?,
|
||||||
val order2: Int?,
|
val order2: Int?,
|
||||||
val flags: IntArray?,
|
val flags: IntArray?,
|
||||||
val pronunciation: Pronunciation?
|
val pronunciations: List<Pronunciation>?
|
||||||
)
|
)
|
||||||
@@ -3,9 +3,11 @@ package service
|
|||||||
import dao.TermDao
|
import dao.TermDao
|
||||||
import models.Term
|
import models.Term
|
||||||
import models.TermFull
|
import models.TermFull
|
||||||
|
import models.Pronunciation
|
||||||
|
|
||||||
interface TermService {
|
interface TermService {
|
||||||
fun getTerm(id: Int): Term?
|
fun getTerm(id: Int): Term?
|
||||||
fun getFullTerm(id: Int): TermFull?
|
fun getFullTerm(id: Int): TermFull?
|
||||||
fun getAllTerm(): List<Term>
|
fun getAllTerm(): List<Term>
|
||||||
|
fun getPronunciationsForTerm(id: Int): List<Pronunciation>?
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import org.jetbrains.exposed.sql.transactions.transaction
|
|||||||
import service.DatabaseFactory.dbExecId
|
import service.DatabaseFactory.dbExecId
|
||||||
import models.Term
|
import models.Term
|
||||||
import models.TermFull
|
import models.TermFull
|
||||||
|
import models.Pronunciation
|
||||||
|
|
||||||
class TermServiceImpl : TermService {
|
class TermServiceImpl : TermService {
|
||||||
override fun getTerm(id: Int): Term? = dbExecId(1) {
|
override fun getTerm(id: Int): Term? = dbExecId(1) {
|
||||||
@@ -19,4 +20,7 @@ class TermServiceImpl : TermService {
|
|||||||
TermDao.findById(id)?.toFullModel()
|
TermDao.findById(id)?.toFullModel()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getPronunciationsForTerm(id: Int): List<Pronunciation>? = dbExecId(1) {
|
||||||
|
null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -27,7 +27,7 @@ fun Route.term(TermService: TermServiceImpl) {
|
|||||||
get("/{id}/full") {
|
get("/{id}/full") {
|
||||||
val id = call.parameters["id"]?.toInt() ?: throw IllegalStateException("Must provide id")
|
val id = call.parameters["id"]?.toInt() ?: throw IllegalStateException("Must provide id")
|
||||||
val term = TermService.getFullTerm(id)
|
val term = TermService.getFullTerm(id)
|
||||||
val pron = Pro
|
|
||||||
if (term == null) call.respond(HttpStatusCode.NotFound)
|
if (term == null) call.respond(HttpStatusCode.NotFound)
|
||||||
else call.respond(term)
|
else call.respond(term)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,64 +0,0 @@
|
|||||||
package web
|
|
||||||
|
|
||||||
import io.ktor.http.*
|
|
||||||
import io.ktor.server.request.*
|
|
||||||
import io.ktor.server.response.*
|
|
||||||
import io.ktor.server.routing.*
|
|
||||||
import io.ktor.server.websocket.*
|
|
||||||
import io.ktor.websocket.*
|
|
||||||
import model.NewWidget
|
|
||||||
import service.WidgetService
|
|
||||||
|
|
||||||
fun Route.widget(widgetService: WidgetService) {
|
|
||||||
|
|
||||||
route("/widgets") {
|
|
||||||
|
|
||||||
get {
|
|
||||||
call.respond(widgetService.getAllWidgets())
|
|
||||||
}
|
|
||||||
|
|
||||||
get("/{id}") {
|
|
||||||
val id = call.parameters["id"]?.toInt() ?: throw IllegalStateException("Must provide id")
|
|
||||||
val widget = widgetService.getWidget(id)
|
|
||||||
if (widget == null) call.respond(HttpStatusCode.NotFound)
|
|
||||||
else call.respond(widget)
|
|
||||||
}
|
|
||||||
|
|
||||||
post {
|
|
||||||
val widget = call.receive<NewWidget>()
|
|
||||||
call.respond(HttpStatusCode.Created, widgetService.addWidget(widget))
|
|
||||||
}
|
|
||||||
|
|
||||||
put {
|
|
||||||
val widget = call.receive<NewWidget>()
|
|
||||||
val updated = widgetService.updateWidget(widget)
|
|
||||||
if (updated == null) call.respond(HttpStatusCode.NotFound)
|
|
||||||
else call.respond(HttpStatusCode.OK, updated)
|
|
||||||
}
|
|
||||||
|
|
||||||
delete("/{id}") {
|
|
||||||
val id = call.parameters["id"]?.toInt() ?: throw IllegalStateException("Must provide id")
|
|
||||||
val removed = widgetService.deleteWidget(id)
|
|
||||||
if (removed) call.respond(HttpStatusCode.OK)
|
|
||||||
else call.respond(HttpStatusCode.NotFound)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
webSocket("/updates") {
|
|
||||||
try {
|
|
||||||
widgetService.addChangeListener(this.hashCode()) {
|
|
||||||
sendSerialized(it)
|
|
||||||
}
|
|
||||||
for (frame in incoming) {
|
|
||||||
if (frame.frameType == FrameType.CLOSE) {
|
|
||||||
break
|
|
||||||
} else if (frame is Frame.Text) {
|
|
||||||
call.application.environment.log.info("Received websocket message: {}", frame.readText())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
widgetService.removeChangeListener(this.hashCode())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user