diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index f31ab9b..ae87cc4 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -20,11 +20,13 @@ import service.DictTypeService import service.DictTypeServiceImpl import service.DictionaryServiceImpl import service.PronunciationServiceImpl - +import service.LanguageServiceImpl +import service.TranslationServiceImpl import web.dictType import web.dictionary import web.pronunciation - +import web.language +import web.translation fun Application.module() { install(DefaultHeaders) @@ -44,12 +46,16 @@ fun Application.module() { val dictTypeService = DictTypeServiceImpl() val dictionaryService = DictionaryServiceImpl() val pronunciationService = PronunciationServiceImpl() + val languageService = LanguageServiceImpl() + val translationService = TranslationServiceImpl() routing { index() dictType(dictTypeService) dictionary(dictionaryService) pronunciation(pronunciationService) + language(languageService) + translation(translationService) } } diff --git a/src/main/kotlin/dao/PronunciationDao.kt b/src/main/kotlin/dao/PronunciationDao.kt index e1bde5e..c636c67 100644 --- a/src/main/kotlin/dao/PronunciationDao.kt +++ b/src/main/kotlin/dao/PronunciationDao.kt @@ -1,11 +1,10 @@ package dao -import models.Translation import org.jetbrains.exposed.dao.* import org.jetbrains.exposed.dao.id.EntityID import tables.Pronunciations import models.Pronunciation -import tables.PronunciationTypes + class PronunciationDao(id: EntityID) : IntEntity(id) { companion object : IntEntityClass(Pronunciations) diff --git a/src/main/kotlin/dao/TermDao.kt b/src/main/kotlin/dao/TermDao.kt new file mode 100644 index 0000000..e69de29 diff --git a/src/main/kotlin/dao/TranslationDao.kt b/src/main/kotlin/dao/TranslationDao.kt index 681ebf5..d6ea655 100644 --- a/src/main/kotlin/dao/TranslationDao.kt +++ b/src/main/kotlin/dao/TranslationDao.kt @@ -11,4 +11,17 @@ class TranslationDao(id: EntityID) : IntEntity(id) { var langName1 by Translations.langName1 var langName2 by Translations.langName2 var direction by Translations.direction + var dictionary by DictionaryDao referencedOn Translations.dictionaryId + var lang1 by LanguageDao referencedOn Translations.lang1Id + var lang2 by LanguageDao referencedOn Translations.lang2Id + + fun toModel() : Translation = Translation( + id = id.value, + dictionaryId = dictionary.id.value, + lang1Id = lang1.id.value, + lang2Id = lang2.id.value, + lang1Name = langName1, + lang2Name = langName2, + direction = direction + ) } \ No newline at end of file diff --git a/src/main/kotlin/service/LanguageService.kt b/src/main/kotlin/service/LanguageService.kt new file mode 100644 index 0000000..3d0815e --- /dev/null +++ b/src/main/kotlin/service/LanguageService.kt @@ -0,0 +1,9 @@ +package service + +import dao.LanguageDao +import models.Language + +interface LanguageService { + fun getLanguage(id: Int): Language? + fun getAllLanguages(): List +} diff --git a/src/main/kotlin/service/LanguageServiceImpl.kt b/src/main/kotlin/service/LanguageServiceImpl.kt new file mode 100644 index 0000000..7891b08 --- /dev/null +++ b/src/main/kotlin/service/LanguageServiceImpl.kt @@ -0,0 +1,17 @@ +package service + +import dao.LanguageDao +import org.jetbrains.exposed.sql.transactions.transaction +import service.DatabaseFactory.dbExecId +import models.Language + +class LanguageServiceImpl : LanguageService { + override fun getLanguage(id: Int): Language? = dbExecId(1) { + LanguageDao.findById(id)?.toModel() + } + + override fun getAllLanguages(): List = dbExecId(1) { + LanguageDao.all().map { it.toModel() } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/service/TranslationService.kt b/src/main/kotlin/service/TranslationService.kt new file mode 100644 index 0000000..601ec68 --- /dev/null +++ b/src/main/kotlin/service/TranslationService.kt @@ -0,0 +1,9 @@ +package service + +import dao.TranslationDao +import models.Translation + +interface TranslationService { + fun getTranslation(id: Int): Translation? + fun getAllTranslations(): List +} diff --git a/src/main/kotlin/service/TranslationServiceImpl.kt b/src/main/kotlin/service/TranslationServiceImpl.kt new file mode 100644 index 0000000..650cf13 --- /dev/null +++ b/src/main/kotlin/service/TranslationServiceImpl.kt @@ -0,0 +1,17 @@ +package service + +import dao.TranslationDao +import org.jetbrains.exposed.sql.transactions.transaction +import service.DatabaseFactory.dbExecId +import models.Translation + +class TranslationServiceImpl : TranslationService { + override fun getTranslation(id: Int): Translation? = dbExecId(1) { + TranslationDao.findById(id)?.toModel() + } + + override fun getAllTranslations(): List = dbExecId(1) { + TranslationDao.all().map { it.toModel() } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/web/LanguageResource.kt b/src/main/kotlin/web/LanguageResource.kt new file mode 100644 index 0000000..3d4126d --- /dev/null +++ b/src/main/kotlin/web/LanguageResource.kt @@ -0,0 +1,29 @@ +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.LanguageServiceImpl +import service.LanguageService + +fun Route.language(LanguageService: LanguageServiceImpl) { + + route("/language") { + + get { + call.respond(LanguageService.getAllLanguages()) + } + + get("/{id}") { + val id = call.parameters["id"]?.toInt() ?: throw IllegalStateException("Must provide id") + val language = LanguageService.getLanguage(id) + if (language == null) call.respond(HttpStatusCode.NotFound) + else call.respond(language) + } + + } + +} diff --git a/src/main/kotlin/web/TranslationResource.kt b/src/main/kotlin/web/TranslationResource.kt new file mode 100644 index 0000000..6c5193d --- /dev/null +++ b/src/main/kotlin/web/TranslationResource.kt @@ -0,0 +1,29 @@ +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.TranslationServiceImpl +import service.TranslationService + +fun Route.translation(TranslationService: TranslationServiceImpl) { + + route("/translation") { + + get { + call.respond(TranslationService.getAllTranslations()) + } + + get("/{id}") { + val id = call.parameters["id"]?.toInt() ?: throw IllegalStateException("Must provide id") + val Translation = TranslationService.getTranslation(id) + if (Translation == null) call.respond(HttpStatusCode.NotFound) + else call.respond(Translation) + } + + } + +}