From a24c442e21e605c4fd658788bc85e32587476203 Mon Sep 17 00:00:00 2001 From: William Andersson Date: Wed, 2 Oct 2024 09:21:38 +0200 Subject: [PATCH] =?UTF-8?q?Sett=20opp=20litt=20mer=20veldefinert=20struktu?= =?UTF-8?q?r=20for=20routes=20med=20tilh=C3=B8rende=20request/response=20k?= =?UTF-8?q?lasser=20(#103)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * setup request types for all egenregistrering classes * Sett opp litt mer veldefinert struktur for routes, request og response klasser * move tests to reflect their "parent" classes position --- .../v1/{ => bygning}/BygningRouteTest.kt | 4 +- .../EgenregistreringRouteTest.kt | 60 ++++----- .../matrikkel/bygning/Application.kt | 6 +- .../kodelister/EgenregistreringKoder.kt | 36 ----- .../response => bygning}/BygningResponse.kt | 2 +- .../routes/v1/{ => bygning}/BygningRoutes.kt | 7 +- .../v1/dto/request/EgenregistreringRequest.kt | 61 --------- .../EgenregisteringRoutes.kt | 13 +- .../EgenregistreringRequest.kt | 123 ++++++++++++++++++ .../routes/v1/kodeliste/KodelisteResponse.kt | 34 +++++ .../v1/{ => kodeliste}/KodelisteRoutes.kt | 6 +- 11 files changed, 201 insertions(+), 151 deletions(-) rename src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/{ => bygning}/BygningRouteTest.kt (90%) rename src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/{ => egenregistrering}/EgenregistreringRouteTest.kt (85%) rename src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/{dto/response => bygning}/BygningResponse.kt (98%) rename src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/{ => bygning}/BygningRoutes.kt (91%) delete mode 100644 src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/dto/request/EgenregistreringRequest.kt rename src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/{ => egenregistrering}/EgenregisteringRoutes.kt (86%) create mode 100644 src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/egenregistrering/EgenregistreringRequest.kt create mode 100644 src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/kodeliste/KodelisteResponse.kt rename src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/{ => kodeliste}/KodelisteRoutes.kt (91%) diff --git a/src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/BygningRouteTest.kt b/src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/bygning/BygningRouteTest.kt similarity index 90% rename from src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/BygningRouteTest.kt rename to src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/bygning/BygningRouteTest.kt index 6491867a..804db6b0 100644 --- a/src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/BygningRouteTest.kt +++ b/src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/bygning/BygningRouteTest.kt @@ -1,4 +1,4 @@ -package no.kartverket.matrikkel.bygning.v1 +package no.kartverket.matrikkel.bygning.v1.bygning import assertk.all import assertk.assertThat @@ -10,7 +10,7 @@ import io.ktor.client.request.* import io.ktor.http.* import io.ktor.server.testing.* import no.kartverket.matrikkel.bygning.TestApplicationWithDb -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.BygningResponse +import no.kartverket.matrikkel.bygning.routes.v1.bygning.BygningResponse import org.junit.jupiter.api.Test class BygningRouteTest : TestApplicationWithDb() { diff --git a/src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/EgenregistreringRouteTest.kt b/src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/egenregistrering/EgenregistreringRouteTest.kt similarity index 85% rename from src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/EgenregistreringRouteTest.kt rename to src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/egenregistrering/EgenregistreringRouteTest.kt index d891d790..de807052 100644 --- a/src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/EgenregistreringRouteTest.kt +++ b/src/integrationTest/kotlin/no/kartverket/matrikkel/bygning/v1/egenregistrering/EgenregistreringRouteTest.kt @@ -1,4 +1,4 @@ -package no.kartverket.matrikkel.bygning.v1 +package no.kartverket.matrikkel.bygning.v1.egenregistrering import assertk.Assert import assertk.all @@ -17,29 +17,29 @@ import io.ktor.client.request.* import io.ktor.http.* import io.ktor.server.testing.* import no.kartverket.matrikkel.bygning.TestApplicationWithDb -import no.kartverket.matrikkel.bygning.models.AvlopRegistrering -import no.kartverket.matrikkel.bygning.models.BruksarealRegistrering -import no.kartverket.matrikkel.bygning.models.ByggeaarRegistrering -import no.kartverket.matrikkel.bygning.models.EnergikildeRegistrering -import no.kartverket.matrikkel.bygning.models.OppvarmingRegistrering -import no.kartverket.matrikkel.bygning.models.VannforsyningRegistrering import no.kartverket.matrikkel.bygning.models.kodelister.AvlopKode import no.kartverket.matrikkel.bygning.models.kodelister.EnergikildeKode import no.kartverket.matrikkel.bygning.models.kodelister.OppvarmingKode import no.kartverket.matrikkel.bygning.models.kodelister.VannforsyningKode -import no.kartverket.matrikkel.bygning.routes.v1.dto.request.BruksenhetRegistreringRequest -import no.kartverket.matrikkel.bygning.routes.v1.dto.request.BygningRegistreringRequest -import no.kartverket.matrikkel.bygning.routes.v1.dto.request.EgenregistreringRequest -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.AvlopKodeResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.BruksarealResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.BruksenhetResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.ByggeaarResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.BygningResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.EnergikildeResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.MultikildeResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.OppvarmingResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.RegisterMetadataResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.VannforsyningKodeResponse +import no.kartverket.matrikkel.bygning.routes.v1.bygning.AvlopKodeResponse +import no.kartverket.matrikkel.bygning.routes.v1.bygning.BruksarealResponse +import no.kartverket.matrikkel.bygning.routes.v1.bygning.BruksenhetResponse +import no.kartverket.matrikkel.bygning.routes.v1.bygning.ByggeaarResponse +import no.kartverket.matrikkel.bygning.routes.v1.bygning.BygningResponse +import no.kartverket.matrikkel.bygning.routes.v1.bygning.EnergikildeResponse +import no.kartverket.matrikkel.bygning.routes.v1.bygning.MultikildeResponse +import no.kartverket.matrikkel.bygning.routes.v1.bygning.OppvarmingResponse +import no.kartverket.matrikkel.bygning.routes.v1.bygning.RegisterMetadataResponse +import no.kartverket.matrikkel.bygning.routes.v1.bygning.VannforsyningKodeResponse +import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.AvlopRegistreringRequest +import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.BruksarealRegistreringRequest +import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.BruksenhetRegistreringRequest +import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.ByggeaarRegistreringRequest +import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.BygningRegistreringRequest +import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.EgenregistreringRequest +import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.EnergikildeRegistreringRequest +import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.OppvarmingRegistreringRequest +import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.VannforsyningRegistreringRequest import org.junit.jupiter.api.Test import java.time.Instant @@ -230,15 +230,15 @@ class EgenregistreringRouteTest : TestApplicationWithDb() { setBody( EgenregistreringRequest.validEgenregistrering().copy( bygningRegistrering = BygningRegistreringRequest( - bruksarealRegistrering = BruksarealRegistrering(bruksareal = 120.0), - byggeaarRegistrering = ByggeaarRegistrering(byggeaar = 2008), + bruksarealRegistrering = BruksarealRegistreringRequest(bruksareal = 120.0), + byggeaarRegistrering = ByggeaarRegistreringRequest(byggeaar = 2008), vannforsyningRegistrering = null, avlopRegistrering = null, ), bruksenhetRegistreringer = listOf( BruksenhetRegistreringRequest( bruksenhetId = 1L, - bruksarealRegistrering = BruksarealRegistrering(bruksareal = 40.0), + bruksarealRegistrering = BruksarealRegistreringRequest(bruksareal = 40.0), energikildeRegistrering = null, oppvarmingRegistrering = null, ), @@ -278,23 +278,23 @@ class EgenregistreringRouteTest : TestApplicationWithDb() { private fun EgenregistreringRequest.Companion.validEgenregistrering() = EgenregistreringRequest( bygningId = 1L, bygningRegistrering = BygningRegistreringRequest( - bruksarealRegistrering = BruksarealRegistrering(125.0), - byggeaarRegistrering = ByggeaarRegistrering(2010), - vannforsyningRegistrering = VannforsyningRegistrering( + bruksarealRegistrering = BruksarealRegistreringRequest(125.0), + byggeaarRegistrering = ByggeaarRegistreringRequest(2010), + vannforsyningRegistrering = VannforsyningRegistreringRequest( VannforsyningKode.OffentligVannverk, ), - avlopRegistrering = AvlopRegistrering( + avlopRegistrering = AvlopRegistreringRequest( avlop = AvlopKode.OffentligKloakk, ), ), bruksenhetRegistreringer = listOf( BruksenhetRegistreringRequest( bruksenhetId = 1L, - bruksarealRegistrering = BruksarealRegistrering(bruksareal = 100.0), - energikildeRegistrering = EnergikildeRegistrering( + bruksarealRegistrering = BruksarealRegistreringRequest(bruksareal = 100.0), + energikildeRegistrering = EnergikildeRegistreringRequest( listOf(EnergikildeKode.Elektrisitet), ), - oppvarmingRegistrering = OppvarmingRegistrering( + oppvarmingRegistrering = OppvarmingRegistreringRequest( listOf(OppvarmingKode.Elektrisk), ), ), diff --git a/src/main/kotlin/no/kartverket/matrikkel/bygning/Application.kt b/src/main/kotlin/no/kartverket/matrikkel/bygning/Application.kt index f44dead5..7cf78b32 100644 --- a/src/main/kotlin/no/kartverket/matrikkel/bygning/Application.kt +++ b/src/main/kotlin/no/kartverket/matrikkel/bygning/Application.kt @@ -18,9 +18,9 @@ import no.kartverket.matrikkel.bygning.plugins.configureStatusPages import no.kartverket.matrikkel.bygning.repositories.EgenregistreringRepository import no.kartverket.matrikkel.bygning.repositories.HealthRepository import no.kartverket.matrikkel.bygning.routes.internalRouting -import no.kartverket.matrikkel.bygning.routes.v1.bygningRouting -import no.kartverket.matrikkel.bygning.routes.v1.egenregistreringRouting -import no.kartverket.matrikkel.bygning.routes.v1.kodelisteRouting +import no.kartverket.matrikkel.bygning.routes.v1.bygning.bygningRouting +import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.egenregistreringRouting +import no.kartverket.matrikkel.bygning.routes.v1.kodeliste.kodelisteRouting import no.kartverket.matrikkel.bygning.services.BygningService import no.kartverket.matrikkel.bygning.services.EgenregistreringService import no.kartverket.matrikkel.bygning.services.HealthService diff --git a/src/main/kotlin/no/kartverket/matrikkel/bygning/models/kodelister/EgenregistreringKoder.kt b/src/main/kotlin/no/kartverket/matrikkel/bygning/models/kodelister/EgenregistreringKoder.kt index 68d9183a..7598e5b6 100644 --- a/src/main/kotlin/no/kartverket/matrikkel/bygning/models/kodelister/EgenregistreringKoder.kt +++ b/src/main/kotlin/no/kartverket/matrikkel/bygning/models/kodelister/EgenregistreringKoder.kt @@ -1,22 +1,11 @@ package no.kartverket.matrikkel.bygning.models.kodelister -import kotlinx.serialization.Serializable -import kotlin.reflect.KClass - // Kan det finnes flere presentasjonsnavn på én kode? For eksempel per ett på bokmål og ett på nynorsk? interface IKode { val presentasjonsnavn: String val beskrivelse: String } -@Serializable -data class Kode( - val kode: String, - val presentasjonsnavn: String, - val beskrivelse: String -) - -@Serializable enum class VannforsyningKode( override val presentasjonsnavn: String, override val beskrivelse: String @@ -36,7 +25,6 @@ enum class VannforsyningKode( ) } -@Serializable enum class AvlopKode( override val presentasjonsnavn: String, override val beskrivelse: String @@ -46,7 +34,6 @@ enum class AvlopKode( IngenKloakk("Ingen kloakk", "Ingen tilknytning til kloakk") } -@Serializable enum class EnergikildeKode( override val presentasjonsnavn: String, override val beskrivelse: String @@ -64,7 +51,6 @@ enum class EnergikildeKode( Varmepumpe("Varmepumpe", "Energikildekode for varmepumpe"), } -@Serializable enum class OppvarmingKode( override val presentasjonsnavn: String, override val beskrivelse: String @@ -73,25 +59,3 @@ enum class OppvarmingKode( Sentralvarme("Sentralvarme", "Sentralvarme"), AnnenOppvarming("Annen oppvarming", "Annen oppvarming") } - -@Serializable -data class KodelisterResponse( - val vannforsyningKoder: List, - val avlopKoder: List, - val energikildeKoder: List, - val oppvarmingKoder: List, -) - -/* - * Enums i Kotlin returnerer kun name parameteret ved bruk av EnumClass.entries(). Denne extension functionen er til for å kunne returnere - * alle relevante parametere - */ -inline fun KClass.toKodeList(): List where T : Enum, T : IKode { - return enumValues().map { - Kode( - kode = it.name, - presentasjonsnavn = it.presentasjonsnavn, - beskrivelse = it.beskrivelse, - ) - } -} diff --git a/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/dto/response/BygningResponse.kt b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/bygning/BygningResponse.kt similarity index 98% rename from src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/dto/response/BygningResponse.kt rename to src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/bygning/BygningResponse.kt index 9f6e1591..6140f4bc 100644 --- a/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/dto/response/BygningResponse.kt +++ b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/bygning/BygningResponse.kt @@ -1,4 +1,4 @@ -package no.kartverket.matrikkel.bygning.routes.v1.dto.response +package no.kartverket.matrikkel.bygning.routes.v1.bygning import kotlinx.serialization.Serializable import no.kartverket.matrikkel.bygning.models.Avlop diff --git a/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/BygningRoutes.kt b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/bygning/BygningRoutes.kt similarity index 91% rename from src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/BygningRoutes.kt rename to src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/bygning/BygningRoutes.kt index ef3d737a..96b5aadf 100644 --- a/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/BygningRoutes.kt +++ b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/bygning/BygningRoutes.kt @@ -1,7 +1,8 @@ -package no.kartverket.matrikkel.bygning.routes.v1 +package no.kartverket.matrikkel.bygning.routes.v1.bygning import io.bkbn.kompendium.core.metadata.GetInfo import io.bkbn.kompendium.core.plugin.NotarizedRoute +import io.bkbn.kompendium.core.plugin.NotarizedRoute.invoke import io.bkbn.kompendium.json.schema.definition.TypeDefinition import io.bkbn.kompendium.oas.payload.Parameter import io.ktor.http.* @@ -12,10 +13,6 @@ import io.ktor.server.util.* import no.kartverket.matrikkel.bygning.models.Result.ErrorResult import no.kartverket.matrikkel.bygning.models.Result.Success import no.kartverket.matrikkel.bygning.models.responses.ErrorResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.BruksenhetResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.BygningResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.toBruksenhetResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.response.toBygningResponse import no.kartverket.matrikkel.bygning.services.BygningService fun Route.bygningRouting( diff --git a/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/dto/request/EgenregistreringRequest.kt b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/dto/request/EgenregistreringRequest.kt deleted file mode 100644 index 012b59f9..00000000 --- a/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/dto/request/EgenregistreringRequest.kt +++ /dev/null @@ -1,61 +0,0 @@ -package no.kartverket.matrikkel.bygning.routes.v1.dto.request - -import kotlinx.serialization.Serializable -import no.kartverket.matrikkel.bygning.models.AvlopRegistrering -import no.kartverket.matrikkel.bygning.models.BruksarealRegistrering -import no.kartverket.matrikkel.bygning.models.BruksenhetRegistrering -import no.kartverket.matrikkel.bygning.models.ByggeaarRegistrering -import no.kartverket.matrikkel.bygning.models.BygningRegistrering -import no.kartverket.matrikkel.bygning.models.Egenregistrering -import no.kartverket.matrikkel.bygning.models.EnergikildeRegistrering -import no.kartverket.matrikkel.bygning.models.OppvarmingRegistrering -import no.kartverket.matrikkel.bygning.models.VannforsyningRegistrering -import java.time.Instant -import java.util.* - - -@Serializable -data class BygningRegistreringRequest( - val bruksarealRegistrering: BruksarealRegistrering?, - val byggeaarRegistrering: ByggeaarRegistrering?, - val vannforsyningRegistrering: VannforsyningRegistrering?, - val avlopRegistrering: AvlopRegistrering? -) - -@Serializable -data class BruksenhetRegistreringRequest( - val bruksenhetId: Long, - val bruksarealRegistrering: BruksarealRegistrering?, - val energikildeRegistrering: EnergikildeRegistrering?, - val oppvarmingRegistrering: OppvarmingRegistrering? -) - -@Serializable -data class EgenregistreringRequest( - val bygningId: Long, - val bygningRegistrering: BygningRegistreringRequest?, - val bruksenhetRegistreringer: List? -) - -fun EgenregistreringRequest.toEgenregistrering(): Egenregistrering { - val registreringstidspunkt = Instant.now() - return Egenregistrering( - id = UUID.randomUUID(), - registreringstidspunkt = registreringstidspunkt, - bygningRegistrering = BygningRegistrering( - bygningId = this.bygningId, - byggeaarRegistrering = this.bygningRegistrering?.byggeaarRegistrering, - bruksarealRegistrering = this.bygningRegistrering?.bruksarealRegistrering, - vannforsyningRegistrering = this.bygningRegistrering?.vannforsyningRegistrering, - avlopRegistrering = this.bygningRegistrering?.avlopRegistrering, - bruksenhetRegistreringer = this.bruksenhetRegistreringer?.map { bruksenhetRegistrering -> - BruksenhetRegistrering( - bruksenhetId = bruksenhetRegistrering.bruksenhetId, - bruksarealRegistrering = bruksenhetRegistrering.bruksarealRegistrering, - energikildeRegistrering = bruksenhetRegistrering.energikildeRegistrering, - oppvarmingRegistrering = bruksenhetRegistrering.oppvarmingRegistrering, - ) - } ?: emptyList(), - ), - ) -} diff --git a/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/EgenregisteringRoutes.kt b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/egenregistrering/EgenregisteringRoutes.kt similarity index 86% rename from src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/EgenregisteringRoutes.kt rename to src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/egenregistrering/EgenregisteringRoutes.kt index 21445a88..c900a85a 100644 --- a/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/EgenregisteringRoutes.kt +++ b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/egenregistrering/EgenregisteringRoutes.kt @@ -1,22 +1,17 @@ -package no.kartverket.matrikkel.bygning.routes.v1 +package no.kartverket.matrikkel.bygning.routes.v1.egenregistrering import io.bkbn.kompendium.core.metadata.PostInfo import io.bkbn.kompendium.core.plugin.NotarizedRoute +import io.bkbn.kompendium.core.plugin.NotarizedRoute.invoke import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* -import no.kartverket.matrikkel.bygning.models.BruksarealRegistrering -import no.kartverket.matrikkel.bygning.models.EnergikildeRegistrering import no.kartverket.matrikkel.bygning.models.Result.ErrorResult import no.kartverket.matrikkel.bygning.models.Result.Success import no.kartverket.matrikkel.bygning.models.kodelister.EnergikildeKode import no.kartverket.matrikkel.bygning.models.responses.ErrorResponse -import no.kartverket.matrikkel.bygning.routes.v1.dto.request.BruksenhetRegistreringRequest -import no.kartverket.matrikkel.bygning.routes.v1.dto.request.BygningRegistreringRequest -import no.kartverket.matrikkel.bygning.routes.v1.dto.request.EgenregistreringRequest -import no.kartverket.matrikkel.bygning.routes.v1.dto.request.toEgenregistrering import no.kartverket.matrikkel.bygning.services.EgenregistreringService fun Route.egenregistreringRouting(egenregistreringService: EgenregistreringService) { @@ -53,7 +48,7 @@ private fun Route.egenregistreringDoc() { "Bygning Id 1" to EgenregistreringRequest( bygningId = 1, bygningRegistrering = BygningRegistreringRequest( - bruksarealRegistrering = BruksarealRegistrering( + bruksarealRegistrering = BruksarealRegistreringRequest( bruksareal = 125.0, ), null, @@ -64,7 +59,7 @@ private fun Route.egenregistreringDoc() { BruksenhetRegistreringRequest( bruksenhetId = 1L, null, - energikildeRegistrering = EnergikildeRegistrering( + energikildeRegistrering = EnergikildeRegistreringRequest( energikilder = listOf(EnergikildeKode.Elektrisitet, EnergikildeKode.Gass), ), null, diff --git a/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/egenregistrering/EgenregistreringRequest.kt b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/egenregistrering/EgenregistreringRequest.kt new file mode 100644 index 00000000..bed453d5 --- /dev/null +++ b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/egenregistrering/EgenregistreringRequest.kt @@ -0,0 +1,123 @@ +package no.kartverket.matrikkel.bygning.routes.v1.egenregistrering + +import kotlinx.serialization.Serializable +import no.kartverket.matrikkel.bygning.models.AvlopRegistrering +import no.kartverket.matrikkel.bygning.models.BruksarealRegistrering +import no.kartverket.matrikkel.bygning.models.BruksenhetRegistrering +import no.kartverket.matrikkel.bygning.models.ByggeaarRegistrering +import no.kartverket.matrikkel.bygning.models.BygningRegistrering +import no.kartverket.matrikkel.bygning.models.Egenregistrering +import no.kartverket.matrikkel.bygning.models.EnergikildeRegistrering +import no.kartverket.matrikkel.bygning.models.OppvarmingRegistrering +import no.kartverket.matrikkel.bygning.models.VannforsyningRegistrering +import no.kartverket.matrikkel.bygning.models.kodelister.AvlopKode +import no.kartverket.matrikkel.bygning.models.kodelister.EnergikildeKode +import no.kartverket.matrikkel.bygning.models.kodelister.OppvarmingKode +import no.kartverket.matrikkel.bygning.models.kodelister.VannforsyningKode +import java.time.Instant +import java.util.* + + +@Serializable +data class BygningRegistreringRequest( + val bruksarealRegistrering: BruksarealRegistreringRequest?, + val byggeaarRegistrering: ByggeaarRegistreringRequest?, + val vannforsyningRegistrering: VannforsyningRegistreringRequest?, + val avlopRegistrering: AvlopRegistreringRequest? +) + +@Serializable +data class BruksenhetRegistreringRequest( + val bruksenhetId: Long, + val bruksarealRegistrering: BruksarealRegistreringRequest?, + val energikildeRegistrering: EnergikildeRegistreringRequest?, + val oppvarmingRegistrering: OppvarmingRegistreringRequest? +) + +@Serializable +data class EgenregistreringRequest( + val bygningId: Long, + val bygningRegistrering: BygningRegistreringRequest?, + val bruksenhetRegistreringer: List? +) + +@Serializable +data class ByggeaarRegistreringRequest( + val byggeaar: Int?, +) + +@Serializable +data class BruksarealRegistreringRequest( + val bruksareal: Double?, +) + +@Serializable +data class VannforsyningRegistreringRequest( + val vannforsyning: VannforsyningKode?, +) + +@Serializable +data class AvlopRegistreringRequest( + val avlop: AvlopKode?, +) + +@Serializable +data class EnergikildeRegistreringRequest( + val energikilder: List?, +) + +@Serializable +data class OppvarmingRegistreringRequest( + val oppvarminger: List?, +) + +fun EgenregistreringRequest.toEgenregistrering(): Egenregistrering { + val registreringstidspunkt = Instant.now() + return Egenregistrering( + id = UUID.randomUUID(), + registreringstidspunkt = registreringstidspunkt, + bygningRegistrering = BygningRegistrering( + bygningId = this.bygningId, + byggeaarRegistrering = this.bygningRegistrering?.byggeaarRegistrering?.let { + ByggeaarRegistrering( + byggeaar = it.byggeaar, + ) + }, + bruksarealRegistrering = this.bygningRegistrering?.bruksarealRegistrering?.let { + BruksarealRegistrering( + bruksareal = it.bruksareal, + ) + }, + vannforsyningRegistrering = this.bygningRegistrering?.vannforsyningRegistrering?.let { + VannforsyningRegistrering( + vannforsyning = it.vannforsyning, + ) + }, + avlopRegistrering = this.bygningRegistrering?.avlopRegistrering?.let { + AvlopRegistrering( + avlop = it.avlop, + ) + }, + bruksenhetRegistreringer = this.bruksenhetRegistreringer?.map { bruksenhetRegistrering -> + BruksenhetRegistrering( + bruksenhetId = bruksenhetRegistrering.bruksenhetId, + bruksarealRegistrering = bruksenhetRegistrering.bruksarealRegistrering?.let { + BruksarealRegistrering( + bruksareal = it.bruksareal, + ) + }, + energikildeRegistrering = bruksenhetRegistrering.energikildeRegistrering?.let { + EnergikildeRegistrering( + energikilder = it.energikilder, + ) + }, + oppvarmingRegistrering = bruksenhetRegistrering.oppvarmingRegistrering?.let { + OppvarmingRegistrering( + oppvarminger = it.oppvarminger, + ) + }, + ) + } ?: emptyList(), + ), + ) +} diff --git a/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/kodeliste/KodelisteResponse.kt b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/kodeliste/KodelisteResponse.kt new file mode 100644 index 00000000..f797e93f --- /dev/null +++ b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/kodeliste/KodelisteResponse.kt @@ -0,0 +1,34 @@ +package no.kartverket.matrikkel.bygning.routes.v1.kodeliste + +import kotlinx.serialization.Serializable +import no.kartverket.matrikkel.bygning.models.kodelister.IKode +import kotlin.reflect.KClass + +@Serializable +data class KodelisterResponse( + val vannforsyningKoder: List, + val avlopKoder: List, + val energikildeKoder: List, + val oppvarmingKoder: List, +) + +@Serializable +data class Kode( + val kode: String, + val presentasjonsnavn: String, + val beskrivelse: String +) + +/* + * Enums i Kotlin returnerer kun name parameteret ved bruk av EnumClass.entries(). Denne extension functionen er til for å kunne returnere + * alle relevante parametere + */ +inline fun KClass.toKodeList(): List where T : Enum, T : IKode { + return enumValues().map { + Kode( + kode = it.name, + presentasjonsnavn = it.presentasjonsnavn, + beskrivelse = it.beskrivelse, + ) + } +} diff --git a/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/KodelisteRoutes.kt b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/kodeliste/KodelisteRoutes.kt similarity index 91% rename from src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/KodelisteRoutes.kt rename to src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/kodeliste/KodelisteRoutes.kt index 9a3be86e..0a8c0004 100644 --- a/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/KodelisteRoutes.kt +++ b/src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/kodeliste/KodelisteRoutes.kt @@ -1,7 +1,8 @@ -package no.kartverket.matrikkel.bygning.routes.v1 +package no.kartverket.matrikkel.bygning.routes.v1.kodeliste import io.bkbn.kompendium.core.metadata.GetInfo import io.bkbn.kompendium.core.plugin.NotarizedRoute +import io.bkbn.kompendium.core.plugin.NotarizedRoute.invoke import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.response.* @@ -9,11 +10,8 @@ import io.ktor.server.routing.* import no.kartverket.matrikkel.bygning.models.kodelister.AvlopKode import no.kartverket.matrikkel.bygning.models.kodelister.EnergikildeKode import no.kartverket.matrikkel.bygning.models.kodelister.IKode -import no.kartverket.matrikkel.bygning.models.kodelister.Kode -import no.kartverket.matrikkel.bygning.models.kodelister.KodelisterResponse import no.kartverket.matrikkel.bygning.models.kodelister.OppvarmingKode import no.kartverket.matrikkel.bygning.models.kodelister.VannforsyningKode -import no.kartverket.matrikkel.bygning.models.kodelister.toKodeList import kotlin.reflect.KClass fun Route.kodelisteRouting() {