Skip to content

Commit

Permalink
more poc egenregistrering
Browse files Browse the repository at this point in the history
  • Loading branch information
anderssonw committed Jun 6, 2024
1 parent 2b936b6 commit 9d673a2
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 29 deletions.
12 changes: 10 additions & 2 deletions src/main/kotlin/no/kartverket/matrikkel/bygning/models/Bygning.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
package no.kartverket.matrikkel.bygning.models

import kotlinx.serialization.Serializable

@Serializable
data class Bygning(
val id: String,
val egenregistreringer: MutableList<BygningsRegistrering>
val bruksarealRegistreringer: MutableList<BruksarealRegistrering>,
val byggeaarRegistreringer: MutableList<ByggeaarRegistrering>,
val vannforsyningsRegistreringer: MutableList<VannforsyningsRegistrering>,
val avlopRegistreringer: MutableList<AvlopRegistrering>,
)

@Serializable
data class Bruksenhet(
val id: String,
val bygningId: String,
val egenregistreringer: MutableList<BruksenhetRegistrering>
val bruksarealRegistreringer: MutableList<BruksarealRegistrering>,
val energikildeRegistreringer: MutableList<EnergikildeRegistrering>,
val oppvarmingRegistreringer: MutableList<OppvarmingRegistrering>
)

Original file line number Diff line number Diff line change
Expand Up @@ -55,17 +55,16 @@ data class AvlopRegistrering(

@Serializable
data class EnergikildeRegistrering(
val energikilde: EnergikildeKode, val registreringMetadata: RegistreringMetadata
val energikilder: List<EnergikildeKode>, val registreringMetadata: RegistreringMetadata
)

@Serializable
data class OppvarmingRegistrering(
val oppvarming: OppvarmingsKode, val registreringMetadata: RegistreringMetadata
val oppvarminger: List<OppvarmingsKode>, val registreringMetadata: RegistreringMetadata
)

@Serializable
data class BygningsRegistrering(
val bygningsId: String,
val bruksarealRegistrering: BruksarealRegistrering,
val byggeaarRegistrering: ByggeaarRegistrering,
val vannforsyningsRegistrering: VannforsyningsRegistrering,
Expand All @@ -76,8 +75,8 @@ data class BygningsRegistrering(
data class BruksenhetRegistrering(
val bruksenhetId: String,
val bruksarealRegistrering: BruksarealRegistrering,
val energikildeRegistreringer: List<EnergikildeRegistrering>,
val oppvarmingRegistreringer: List<OppvarmingRegistrering>
val energikildeRegistrering: EnergikildeRegistrering,
val oppvarmingRegistrering: OppvarmingRegistrering
)

@Serializable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.kartverket.matrikkel.bygning.routes.v1

import io.bkbn.kompendium.core.metadata.GetInfo
import io.bkbn.kompendium.core.metadata.PostInfo
import io.bkbn.kompendium.core.plugin.NotarizedRoute
import io.bkbn.kompendium.json.schema.definition.TypeDefinition
Expand All @@ -9,21 +10,48 @@ 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.Bygning
import no.kartverket.matrikkel.bygning.models.Egenregistrering
import no.kartverket.matrikkel.bygning.services.EgenregistreringsService

fun Route.egenregistreringRouting(egenregistreringsService: EgenregistreringsService) {
route("/egenregistrering") {
route("{bygningId}") {
egenregistreringBygningIdDoc()
get {
val gyldigFra = call.request.queryParameters["gyldigFra"]?.toLong() ?: 0L
val bygningId = call.parameters["bygningId"]

if (bygningId == null) {
call.respondText("Du må sende med bygningId som parameter", status = HttpStatusCode.BadRequest)
return@get
}

val egenregistreringerForBygning =
egenregistreringsService.getEgenregistreringerForBygning(bygningId, gyldigFra)

if (egenregistreringerForBygning != null) {
call.respond(egenregistreringerForBygning)
} else {
call.respondText("Fant ingen bygninger med id $bygningId", status = HttpStatusCode.NotFound)
}

}
post {
val egenregistrering = call.receive<Egenregistrering>()

val bygningId = call.parameters["bygningId"]

if (bygningId == null) {
call.respondText("Du må sende med bygningId som parameter", status = HttpStatusCode.BadRequest)
return@post
}

val addedEgenregistrering = egenregistreringsService.addEgenregistreringToBygning(bygningId, egenregistrering)

if (egenregistreringsService.addEgenregistreringToBygning(egenregistrering)) {
if (addedEgenregistrering) {
call.respondText(
"Egenregistrering registrert på bygning ${egenregistrering.bygningsRegistrering.bygningsId}",
status = HttpStatusCode.OK
"Egenregistrering registrert på bygning $bygningId", status = HttpStatusCode.OK
)
} else {
call.respondText(
Expand All @@ -40,7 +68,7 @@ private fun Route.egenregistreringBygningIdDoc() {
install(NotarizedRoute()) {
parameters = listOf(
Parameter(
name = "id", `in` = Parameter.Location.path, schema = TypeDefinition.STRING
name = "bygningId", `in` = Parameter.Location.path, schema = TypeDefinition.STRING
)
)
post = PostInfo.builder {
Expand All @@ -63,5 +91,28 @@ private fun Route.egenregistreringBygningIdDoc() {
description("Alle bruksenheter som kom i request tilhørte ikke bygningen")
}
}

get = GetInfo.builder {
summary("Hent egenregistreringer for en bygning")
description("Henter egenregistreringer på en bygning gitt en gyldighetsdato. Henter ikke tilhørende bruksenheter. Uten gyldighetsdato henter den alle registreringer")

parameters(
Parameter(
name = "gyldigFra", `in` = Parameter.Location.query, schema = TypeDefinition.LONG, required = false
)
)

response {
responseCode(HttpStatusCode.OK)
responseType<Bygning>()
description("Bygning med tilhørende egenregistreringer")
}

canRespond {
responseCode(HttpStatusCode.NotFound)
responseType<String>()
description("Fant ikke bygning med gitt id")
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,38 +6,42 @@ import no.kartverket.matrikkel.bygning.models.Egenregistrering

class EgenregistreringsService {
val bygninger: MutableList<Bygning> = mutableListOf(
Bygning("1", mutableListOf()),
Bygning("2", mutableListOf()),
Bygning("1", mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf()),
Bygning("2", mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf()),
)
val bruksenheter: MutableList<Bruksenhet> = mutableListOf(
Bruksenhet("a", "1", mutableListOf()),
Bruksenhet("b", "1", mutableListOf()),
Bruksenhet("c", "2", mutableListOf()),
Bruksenhet("d", "2", mutableListOf()),
Bruksenhet("a", "1", mutableListOf(), mutableListOf(), mutableListOf()),
Bruksenhet("b", "1", mutableListOf(), mutableListOf(), mutableListOf()),
Bruksenhet("c", "2", mutableListOf(), mutableListOf(), mutableListOf()),
Bruksenhet("d", "2", mutableListOf(), mutableListOf(), mutableListOf()),
)

fun addEgenregistreringToBygning(egenregistrering: Egenregistrering): Boolean {
val bygningIdForEgenregistrering = egenregistrering.bygningsRegistrering.bygningsId

val isAllBruksenheterRegisteredOnCorrectBygning = egenregistrering.bruksenhetRegistreringer.any { it ->
fun addEgenregistreringToBygning(bygningId: String, egenregistrering: Egenregistrering): Boolean {
val isAllBruksenheterRegisteredOnCorrectBygning = egenregistrering.bruksenhetRegistreringer.any {
val bruksenhet = bruksenheter.find { bruksenhet -> it.bruksenhetId == bruksenhet.bygningId }

return bruksenhet?.bygningId != bygningIdForEgenregistrering
bruksenhet?.bygningId != bygningId
}

if (!isAllBruksenheterRegisteredOnCorrectBygning) return false

val bygningIfExists = bygninger.find { it.id == bygningIdForEgenregistrering }
val bygningIfExists = bygninger.find { it.id == bygningId }

if (bygningIfExists == null) {
bygninger.add(
Bygning(
id = bygningIdForEgenregistrering,
egenregistreringer = mutableListOf(egenregistrering.bygningsRegistrering)
id = bygningId,
bruksarealRegistreringer = mutableListOf(egenregistrering.bygningsRegistrering.bruksarealRegistrering),
byggeaarRegistreringer = mutableListOf(egenregistrering.bygningsRegistrering.byggeaarRegistrering),
vannforsyningsRegistreringer = mutableListOf(egenregistrering.bygningsRegistrering.vannforsyningsRegistrering),
avlopRegistreringer = mutableListOf(egenregistrering.bygningsRegistrering.avlopRegistrering)
)
)
} else {
bygningIfExists.egenregistreringer.add(egenregistrering.bygningsRegistrering)
bygningIfExists.bruksarealRegistreringer.add(egenregistrering.bygningsRegistrering.bruksarealRegistrering)
bygningIfExists.byggeaarRegistreringer.add(egenregistrering.bygningsRegistrering.byggeaarRegistrering)
bygningIfExists.vannforsyningsRegistreringer.add(egenregistrering.bygningsRegistrering.vannforsyningsRegistrering)
bygningIfExists.avlopRegistreringer.add(egenregistrering.bygningsRegistrering.avlopRegistrering)
}

egenregistrering.bruksenhetRegistreringer.forEach { bruksenhetRegistrering ->
Expand All @@ -48,15 +52,34 @@ class EgenregistreringsService {
bruksenheter.add(
Bruksenhet(
id = bruksenhetId,
bygningId = bygningIdForEgenregistrering,
egenregistreringer = mutableListOf(bruksenhetRegistrering)
bygningId = bygningId,
bruksarealRegistreringer = mutableListOf(bruksenhetRegistrering.bruksarealRegistrering),
energikildeRegistreringer = mutableListOf(bruksenhetRegistrering.energikildeRegistrering),
oppvarmingRegistreringer = mutableListOf(bruksenhetRegistrering.oppvarmingRegistrering),
)
)
} else {
bruksenhetIfExists.egenregistreringer.add(bruksenhetRegistrering)
bruksenhetIfExists.bruksarealRegistreringer.add(bruksenhetRegistrering.bruksarealRegistrering)
bruksenhetIfExists.energikildeRegistreringer.add(bruksenhetRegistrering.energikildeRegistrering)
bruksenhetIfExists.oppvarmingRegistreringer.add(bruksenhetRegistrering.oppvarmingRegistrering)
}
}

return true
}

fun getEgenregistreringerForBygning(bygningId: String, gyldigFra: Long): Bygning? {
val bygning = bygninger.find { it.id == bygningId } ?: return null

return bygning.copy(
bruksarealRegistreringer = bygning.bruksarealRegistreringer.filter { it.registreringMetadata.gyldigFra > gyldigFra }
.toMutableList(),
byggeaarRegistreringer = bygning.byggeaarRegistreringer.filter { it.registreringMetadata.gyldigFra > gyldigFra }
.toMutableList(),
vannforsyningsRegistreringer = bygning.vannforsyningsRegistreringer.filter { it.registreringMetadata.gyldigFra > gyldigFra }
.toMutableList(),
avlopRegistreringer = bygning.avlopRegistreringer.filter { it.registreringMetadata.gyldigFra > gyldigFra }
.toMutableList(),
)
}
}

0 comments on commit 9d673a2

Please sign in to comment.