From b96550fc72f2b0d6052355e1515cec32f9358a65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20St=C3=A4ding?= Date: Tue, 15 Aug 2023 22:29:54 +0200 Subject: [PATCH] Work on repositories --- .../guestbook/http/GuestbookOutbound.kt | 29 +++++++++++++++++-- .../kotlin/guestbook/http/GuestbookInbound.kt | 6 +++- .../{GuestbookRoute.kt => RepositoryRoute.kt} | 2 +- .../db/guestbook/GuestbookRepositoryImpl.kt | 5 ++++ .../guestbook/domain/GuestbookRepository.kt | 4 +-- 5 files changed, 39 insertions(+), 7 deletions(-) rename app/web/src/commonMain/kotlin/guestbook.web/http/{GuestbookRoute.kt => RepositoryRoute.kt} (86%) diff --git a/app/web/backend/src/jvmMain/kotlin/guestbook/http/GuestbookOutbound.kt b/app/web/backend/src/jvmMain/kotlin/guestbook/http/GuestbookOutbound.kt index a9602ef..19efbad 100644 --- a/app/web/backend/src/jvmMain/kotlin/guestbook/http/GuestbookOutbound.kt +++ b/app/web/backend/src/jvmMain/kotlin/guestbook/http/GuestbookOutbound.kt @@ -1,10 +1,33 @@ package guestbook.http +import io.ktor.http.HttpStatusCode +import io.ktor.resources.Resource +import io.ktor.server.application.call +import io.ktor.server.resources.get +import io.ktor.server.response.respond import io.ktor.server.routing.Route import io.ktor.server.routing.route +import org.sourcegrade.kontour.DomainEntity +import org.sourcegrade.kontour.Repository +import java.util.UUID -fun Route.registerGuestbookRoutes() { - route("/api/guestbook") { - +inline fun Route.registerRepositoryGet( + name: String, + repository: Repository, +) { + route("/api/$name") { + get { (sid) -> + val id = UUID.fromString(sid) + val item = repository.getById(id) + if (item == null) { + call.respond(HttpStatusCode.NotFound, "Item with id $id not found in repository $name") + } else { + call.respond(HttpStatusCode.OK, item) + } + } } } + +@PublishedApi +@Resource("{id}") +internal data class ById(val id: String) diff --git a/app/web/frontend/src/jsMain/kotlin/guestbook/http/GuestbookInbound.kt b/app/web/frontend/src/jsMain/kotlin/guestbook/http/GuestbookInbound.kt index 61c1394..e0b4deb 100644 --- a/app/web/frontend/src/jsMain/kotlin/guestbook/http/GuestbookInbound.kt +++ b/app/web/frontend/src/jsMain/kotlin/guestbook/http/GuestbookInbound.kt @@ -10,7 +10,7 @@ class ClientRepository>( val httpClient: HttpClient, ) : Repository { override suspend fun countAll(): Long { - TODO("Not yet implemented") + } override suspend fun deleteById(id: UUID): Boolean { @@ -21,6 +21,10 @@ class ClientRepository>( TODO("Not yet implemented") } + override suspend fun getById(id: UUID): E? { + + } + override suspend fun create(item: C): E { TODO("Not yet implemented") } diff --git a/app/web/src/commonMain/kotlin/guestbook.web/http/GuestbookRoute.kt b/app/web/src/commonMain/kotlin/guestbook.web/http/RepositoryRoute.kt similarity index 86% rename from app/web/src/commonMain/kotlin/guestbook.web/http/GuestbookRoute.kt rename to app/web/src/commonMain/kotlin/guestbook.web/http/RepositoryRoute.kt index 2f2a6a3..6df8004 100644 --- a/app/web/src/commonMain/kotlin/guestbook.web/http/GuestbookRoute.kt +++ b/app/web/src/commonMain/kotlin/guestbook.web/http/RepositoryRoute.kt @@ -3,7 +3,7 @@ package guestbook.web.http import io.ktor.resources.Resource @Resource("/api/v1/guestbook") -class GuestbookRoute { +class RepositoryRoute { @Resource("{id}") class ById(val id: String) } diff --git a/db/src/jvmMain/kotlin/guestbook/core/db/guestbook/GuestbookRepositoryImpl.kt b/db/src/jvmMain/kotlin/guestbook/core/db/guestbook/GuestbookRepositoryImpl.kt index c745de6..8e24dd7 100644 --- a/db/src/jvmMain/kotlin/guestbook/core/db/guestbook/GuestbookRepositoryImpl.kt +++ b/db/src/jvmMain/kotlin/guestbook/core/db/guestbook/GuestbookRepositoryImpl.kt @@ -10,6 +10,7 @@ import org.jetbrains.exposed.sql.insert import org.jetbrains.exposed.sql.select import org.jetbrains.exposed.sql.selectAll import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction +import org.sourcegrade.kontour.Pagination import org.sourcegrade.kontour.UUID object GuestbookRepositoryImpl : GuestbookRepository { @@ -36,6 +37,10 @@ object GuestbookRepositoryImpl : GuestbookRepository { } } + override suspend fun paginate(): Pagination { + TODO("Not yet implemented") + } + override suspend fun getById(id: UUID): Guestbook? { return newSuspendedTransaction { createJoin() diff --git a/domain/src/commonMain/kotlin/guestbook/domain/GuestbookRepository.kt b/domain/src/commonMain/kotlin/guestbook/domain/GuestbookRepository.kt index 3a90b8e..8dcddbc 100644 --- a/domain/src/commonMain/kotlin/guestbook/domain/GuestbookRepository.kt +++ b/domain/src/commonMain/kotlin/guestbook/domain/GuestbookRepository.kt @@ -1,7 +1,7 @@ package guestbook.domain -import org.sourcegrade.kontour.Repository +import org.sourcegrade.kontour.MutableRepository -interface GuestbookRepository : Repository { +interface GuestbookRepository : MutableRepository { suspend fun findByName(name: String): Guestbook? }