From ef5df17f58d6b2bc66eec6443b2af4f2f8e90b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20Dr=C5=BE=C3=ADk?= Date: Sun, 12 Jan 2025 11:47:59 +0100 Subject: [PATCH] Add some other resources --- src/main/kotlin/Main.kt | 5 +++ src/main/kotlin/dao/SuffixDao.kt | 5 +++ src/main/kotlin/dao/TermDao.kt | 46 ++++++++++++++++++++++ src/main/kotlin/models/Term.kt | 25 +++++++++--- src/main/kotlin/service/TermService.kt | 11 ++++++ src/main/kotlin/service/TermServiceImpl.kt | 22 +++++++++++ src/main/kotlin/web/TermResource.kt | 37 +++++++++++++++++ 7 files changed, 145 insertions(+), 6 deletions(-) create mode 100644 src/main/kotlin/service/TermService.kt create mode 100644 src/main/kotlin/service/TermServiceImpl.kt create mode 100644 src/main/kotlin/web/TermResource.kt diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index ae87cc4..491ba95 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -22,11 +22,14 @@ import service.DictionaryServiceImpl import service.PronunciationServiceImpl import service.LanguageServiceImpl import service.TranslationServiceImpl +import service.TermServiceImpl + import web.dictType import web.dictionary import web.pronunciation import web.language import web.translation +import web.term fun Application.module() { install(DefaultHeaders) @@ -48,6 +51,7 @@ fun Application.module() { val pronunciationService = PronunciationServiceImpl() val languageService = LanguageServiceImpl() val translationService = TranslationServiceImpl() + val termService = TermServiceImpl() routing { index() @@ -56,6 +60,7 @@ fun Application.module() { pronunciation(pronunciationService) language(languageService) translation(translationService) + term(termService) } } diff --git a/src/main/kotlin/dao/SuffixDao.kt b/src/main/kotlin/dao/SuffixDao.kt index 8f90e29..8cc13be 100644 --- a/src/main/kotlin/dao/SuffixDao.kt +++ b/src/main/kotlin/dao/SuffixDao.kt @@ -3,9 +3,14 @@ package dao import org.jetbrains.exposed.dao.* import org.jetbrains.exposed.dao.id.EntityID import tables.Suffixes +import models.Suffix class SuffixDao(id: EntityID) : IntEntity(id) { companion object : IntEntityClass(Suffixes) var text by Suffixes.text + fun toModel(): Suffix = Suffix( + id = id.value, + text = text + ) } \ No newline at end of file diff --git a/src/main/kotlin/dao/TermDao.kt b/src/main/kotlin/dao/TermDao.kt index e69de29..236d9af 100644 --- a/src/main/kotlin/dao/TermDao.kt +++ b/src/main/kotlin/dao/TermDao.kt @@ -0,0 +1,46 @@ +package dao + +import dao.SuffixDao.Companion.referrersOn +import models.Language +import org.jetbrains.exposed.dao.* +import org.jetbrains.exposed.dao.id.EntityID +import tables.* +import models.Term +import models.TermFull + +class TermDao(id: EntityID) : IntEntity(id) { + companion object : IntEntityClass(Terms) + + var string1 by Terms.string1 + var string2 by Terms.string2 + var suffix1 by SuffixDao optionalReferencedOn Terms.suffix1 + var suffix2 by SuffixDao optionalReferencedOn Terms.suffix2 + var type by DictTypeDao optionalReferencedOn Terms.type + var member by Terms.member + var order2 by Terms.order2 + var flags by Terms.flags + + fun toModel(): Term = Term( + id = id.value, + string1 = string1, + string2 = string2, + typeId = type?.id?.value, + suffix1Id = suffix1?.id?.value, + suffix2Id = suffix2?.id?.value, + member = member, + order2 = order2, + flags = flags + ) + fun toFullModel(): TermFull = TermFull( + id = id.value, + string1 = string1, + string2 = string2, + type = type?.toModel(), + suffix1 = suffix1?.toModel(), + suffix2 = suffix2?.toModel(), + member = member, + order2 = order2, + flags = flags, + pronunciation = null + ) +} \ No newline at end of file diff --git a/src/main/kotlin/models/Term.kt b/src/main/kotlin/models/Term.kt index 5232de8..cd6d97b 100644 --- a/src/main/kotlin/models/Term.kt +++ b/src/main/kotlin/models/Term.kt @@ -8,13 +8,26 @@ import org.jetbrains.exposed.sql.Table @Serializable data class Term( val id: Int, - val dictionaryId: Int, val string1: String, val string2: String, - val typeId: Int, - val suffix1Id: Int, - val suffix2Id: Int, + val typeId: Int?, + val suffix1Id: Int?, + val suffix2Id: Int?, val member: String?, - val order2: Int, - val flags: JsonObject? + val order2: Int?, + val flags: IntArray? ) + +@Serializable +data class TermFull( + val id: Int, + val string1: String, + val string2: String, + val type: DictType?, + val suffix1: Suffix?, + val suffix2: Suffix?, + val member: String?, + val order2: Int?, + val flags: IntArray?, + val pronunciation: Pronunciation? +) \ No newline at end of file diff --git a/src/main/kotlin/service/TermService.kt b/src/main/kotlin/service/TermService.kt new file mode 100644 index 0000000..4534796 --- /dev/null +++ b/src/main/kotlin/service/TermService.kt @@ -0,0 +1,11 @@ +package service + +import dao.TermDao +import models.Term +import models.TermFull + +interface TermService { + fun getTerm(id: Int): Term? + fun getFullTerm(id: Int): TermFull? + fun getAllTerm(): List +} diff --git a/src/main/kotlin/service/TermServiceImpl.kt b/src/main/kotlin/service/TermServiceImpl.kt new file mode 100644 index 0000000..3c97d7a --- /dev/null +++ b/src/main/kotlin/service/TermServiceImpl.kt @@ -0,0 +1,22 @@ +package service + +import dao.TermDao +import org.jetbrains.exposed.sql.transactions.transaction +import service.DatabaseFactory.dbExecId +import models.Term +import models.TermFull + +class TermServiceImpl : TermService { + override fun getTerm(id: Int): Term? = dbExecId(1) { + TermDao.findById(id)?.toModel() + } + + override fun getAllTerm(): List = dbExecId(1) { + TermDao.all().map { it.toModel() } + } + + override fun getFullTerm(id: Int): TermFull? = dbExecId(1) { + TermDao.findById(id)?.toFullModel() + } + +} \ No newline at end of file diff --git a/src/main/kotlin/web/TermResource.kt b/src/main/kotlin/web/TermResource.kt new file mode 100644 index 0000000..43e857b --- /dev/null +++ b/src/main/kotlin/web/TermResource.kt @@ -0,0 +1,37 @@ +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 service.TermServiceImpl +import service.TermService + +fun Route.term(TermService: TermServiceImpl) { + + route("/term") { + + get { + call.respond(TermService.getAllTerm()) + } + + get("/{id}") { + val id = call.parameters["id"]?.toInt() ?: throw IllegalStateException("Must provide id") + val term = TermService.getTerm(id) + if (term == null) call.respond(HttpStatusCode.NotFound) + else call.respond(term) + } + + get("/{id}/full") { + val id = call.parameters["id"]?.toInt() ?: throw IllegalStateException("Must provide id") + val term = TermService.getFullTerm(id) + val pron = Pro + if (term == null) call.respond(HttpStatusCode.NotFound) + else call.respond(term) + } + + } + +}