Skip to content

Commit

Permalink
rename package and add new egenreg service with kompendium openapi spec
Browse files Browse the repository at this point in the history
  • Loading branch information
anderssonw committed Jun 6, 2024
1 parent d04e846 commit bb21ed9
Show file tree
Hide file tree
Showing 14 changed files with 260 additions and 188 deletions.
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ RUN gradle shadowjar --no-daemon
FROM eclipse-temurin:21-jdk-alpine
EXPOSE 8080:8080
RUN mkdir /app
COPY --from=build /home/gradle/src/build/libs/*.jar /app/matrikkel-bygning-egenregistering.jar
ENTRYPOINT ["java","-jar","/app/matrikkel-bygning-egenregistering.jar"]
COPY --from=build /home/gradle/src/build/libs/*.jar /app/matrikkel-bygning-egenregistrering.jar
ENTRYPOINT ["java","-jar","/app/matrikkel-bygning-egenregistrering.jar"]
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# API for Bygning

Dette repoet har ansvar for ny bygningsdel som del av Eiendomsregister 2.0. I første omgang er det ønskelig at APIet
skal kunne ta i mot egenregistrert data om bygninger og bruksenheter fra Team Egenregistering.
skal kunne ta i mot egenregistrert data om bygninger og bruksenheter fra Team Egenregistrering.

## Lokalt oppsett

Expand Down
4 changes: 3 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,16 @@ dependencies {
implementation(libs.flyway.core)
implementation(libs.flyway.database.postgresql)

implementation(libs.kompendium.core)

// Tests
testImplementation(libs.ktor.server.tests)
testImplementation(libs.kotlin.test)
}

ktor {
fatJar {
archiveFileName.set("matrikkel-bygning-egenregistering.jar")
archiveFileName.set("matrikkel-bygning-egenregistrering.jar")
}
}

Expand Down
2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ flywayVersion = "10.13.0"
jacksonVersion = "2.17.1"
postgresVersion = "42.7.3"
shadowVersion = "8.1.1"
kompendiumVersion = "3.14.4"

[libraries]
ktor-server-core = { group = "io.ktor", name = "ktor-server-core-jvm", version.ref = "ktorVersion" }
Expand All @@ -30,6 +31,7 @@ logback-classic = { group = "ch.qos.logback", name = "logback-classic", version.
jackson-databind = { group = "com.fasterxml.jackson.core", name = "jackson-databind", version.ref = "jacksonVersion" }
postgres = { group = "org.postgresql", name = "postgresql", version.ref = "postgresVersion" }
kotlin-test = { group = "org.jetbrains.kotlin", name = "kotlin-test-junit", version.ref = "kotlinVersion" }
kompendium-core = { group = "io.bkbn", name = "kompendium-core", version.ref = "kompendiumVersion" }


[plugins]
Expand Down
2 changes: 1 addition & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
rootProject.name = "matrikkel-bygning-egenregistering"
rootProject.name = "matrikkel-bygning-egenregistrering"
31 changes: 25 additions & 6 deletions src/main/kotlin/no/kartverket/matrikkel/bygning/Application.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package no.kartverket.matrikkel.bygning

import io.bkbn.kompendium.core.plugin.NotarizedApplication
import io.bkbn.kompendium.json.schema.KotlinXSchemaConfigurator
import io.bkbn.kompendium.oas.OpenApiSpec
import io.bkbn.kompendium.oas.info.Info
import io.bkbn.kompendium.oas.serialization.KompendiumSerializersModule
import io.ktor.http.*
import io.ktor.serialization.kotlinx.json.*
import io.ktor.server.application.*
Expand All @@ -14,12 +19,12 @@ import io.ktor.server.response.*
import io.ktor.server.routing.*
import io.micrometer.prometheusmetrics.PrometheusConfig
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import kotlinx.serialization.json.Json
import no.kartverket.matrikkel.bygning.db.DatabaseSingleton
import no.kartverket.matrikkel.bygning.repositories.BygningRepository
import no.kartverket.matrikkel.bygning.repositories.HealthRepository
import no.kartverket.matrikkel.bygning.routes.v1.baseRoutesV1
import no.kartverket.matrikkel.bygning.routes.v1.probeRouting
import no.kartverket.matrikkel.bygning.services.BygningService
import no.kartverket.matrikkel.bygning.services.EgenregistreringsService
import no.kartverket.matrikkel.bygning.services.HealthService

val appMicrometerRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)
Expand All @@ -33,7 +38,11 @@ fun main(args: Array<String>) {

fun Application.module() {
install(ContentNegotiation) {
json()
json(Json {
serializersModule = KompendiumSerializersModule.module
encodeDefaults = true

})
removeIgnoredType<String>()
}

Expand All @@ -52,12 +61,22 @@ fun Application.module() {
registry = appMicrometerRegistry
}

install(NotarizedApplication()) {
spec = OpenApiSpec(
info = Info(
title = "",
version = "",
)
)
schemaConfigurator = KotlinXSchemaConfigurator()
}

DatabaseSingleton.init()
val dbConnection = DatabaseSingleton.getConnection()
val bygningRepository = BygningRepository(dbConnection)
val bygningService = BygningService(bygningRepository)

baseRoutesV1(bygningService)
val egenregistreringsService = EgenregistreringsService()

baseRoutesV1(egenregistreringsService)
}

fun Application.internalModule() {
Expand Down
20 changes: 6 additions & 14 deletions src/main/kotlin/no/kartverket/matrikkel/bygning/models/Bygning.kt
Original file line number Diff line number Diff line change
@@ -1,22 +1,14 @@
package no.kartverket.matrikkel.bygning.models

import kotlinx.serialization.Serializable

@Serializable
data class Bygning(
val id: String,
val byggeaar: Int,
val areal: Double,
val energikilder: List<Energikilde>,
val oppvarming: List<Oppvarming>,
val vann: Boolean,
val avlop: Boolean,
val egenregistreringer: MutableList<BygningsRegistrering>
)

enum class Oppvarming {
VARMEPUMPE
}
data class Bruksenhet(
val id: String,
val bygningId: String,
val egenregistreringer: MutableList<BruksenhetRegistrering>
)

enum class Energikilde {
GEOTERMISK,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package no.kartverket.matrikkel.bygning.models

import kotlinx.serialization.Serializable


enum class MetadataStatus {
Gjeldende, Slettet, Uenighet
}

// TODO Hent fra kodelister i stedet for å definere selv
enum class OppvarmingsKode {
Elektrisk, Sentralvarme, Annen
}

enum class EnergikildeKode {
Biobrensel, Elektrisitet, Fjernvarme, Gass, Oljeparafin, Solenergi, Varmepumpe, Annen
}

enum class AvlopKode {
OffentligKloakk, PrivatKloakk, Ingen,
}

enum class VannforsyningKode {
OffentligVannverk, TilknyttetPrivatVannverk, AnnenPrivatInnlagtVann, AnnenPrivatIkkeInnlagtVann,
}

@Serializable
data class RegistreringMetadata(
val registrerer: String,
val registreringstidspunkt: Long,
val gyldigFra: Long,
val gyldigTil: Long?,
val status: MetadataStatus,
)

@Serializable
data class ByggeaarRegistrering(
val byggeaar: Int, val registreringMetadata: RegistreringMetadata
)

@Serializable
data class BruksarealRegistrering(
val bruksareal: Double, val registreringMetadata: RegistreringMetadata
)

@Serializable
data class VannforsyningsRegistrering(
val vannforsyning: VannforsyningKode, val registreringMetadata: RegistreringMetadata
)

@Serializable
data class AvlopRegistrering(
val avlop: AvlopKode, val registreringMetadata: RegistreringMetadata
)

@Serializable
data class EnergikildeRegistrering(
val energikilde: EnergikildeKode, val registreringMetadata: RegistreringMetadata
)

@Serializable
data class OppvarmingRegistrering(
val oppvarming: OppvarmingsKode, val registreringMetadata: RegistreringMetadata
)

@Serializable
data class BygningsRegistrering(
val bygningsId: String,
val bruksarealRegistrering: BruksarealRegistrering,
val byggeaarRegistrering: ByggeaarRegistrering,
val vannforsyningsRegistrering: VannforsyningsRegistrering,
val avlopRegistrering: AvlopRegistrering
)

@Serializable
data class BruksenhetRegistrering(
val bruksenhetId: String,
val bruksarealRegistrering: BruksarealRegistrering,
val energikildeRegistreringer: List<EnergikildeRegistrering>,
val oppvarmingRegistreringer: List<OppvarmingRegistrering>
)

@Serializable
data class Egenregistrering(
val bygningsRegistrering: BygningsRegistrering, val bruksenhetRegistreringer: List<BruksenhetRegistrering>
)
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package no.kartverket.matrikkel.bygning.routes.v1

import io.bkbn.kompendium.core.routes.swagger
import io.ktor.server.application.*
import io.ktor.server.plugins.swagger.*
import io.ktor.server.routing.*
import no.kartverket.matrikkel.bygning.services.BygningService
import no.kartverket.matrikkel.bygning.services.EgenregistreringsService

fun Application.baseRoutesV1(
bygningService: BygningService
egenregistreringsService: EgenregistreringsService
) {
routing {
swaggerUI(path = "swagger", swaggerFile = "openapi/documentation.yaml")
swagger()

route("/v1") {
bygningRouting(bygningService)
egenregistreringRouting(egenregistreringsService)
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package no.kartverket.matrikkel.bygning.routes.v1

import io.bkbn.kompendium.core.metadata.PostInfo
import io.bkbn.kompendium.core.plugin.NotarizedRoute
import io.bkbn.kompendium.json.schema.definition.TypeDefinition
import io.bkbn.kompendium.oas.payload.Parameter
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.Egenregistrering
import no.kartverket.matrikkel.bygning.services.EgenregistreringsService

fun Route.egenregistreringRouting(egenregistreringsService: EgenregistreringsService) {
route("/egenregistrering") {
route("{bygningId}") {
egenregistreringBygningIdDoc()
post {
val egenregistrering = call.receive<Egenregistrering>()


if (egenregistreringsService.addEgenregistreringToBygning(egenregistrering)) {
call.respondText(
"Egenregistrering registrert på bygning ${egenregistrering.bygningsRegistrering.bygningsId}",
status = HttpStatusCode.OK
)
} else {
call.respondText(
"Det ble forsøkt registrert egenregistreringer på bruksenheter som ikke har tilknytning til bygningen",
status = HttpStatusCode.BadRequest
)
}
}
}
}
}

private fun Route.egenregistreringBygningIdDoc() {
install(NotarizedRoute()) {
parameters = listOf(
Parameter(
name = "id", `in` = Parameter.Location.path, schema = TypeDefinition.STRING
)
)
post = PostInfo.builder {
summary("Legg til en egenregistrering på en bygning")
description("Legger til en egenregistrering på en bygning og tilhørende bruksenheter, hvis noen")
request {
requestType<Egenregistrering>()
required(true)
description("Egeneregistrert data")
}
response {
responseCode(HttpStatusCode.OK)
responseType<String>()
description("Bygninger og eventuelle bruksenheter registrert")
}

canRespond {
responseCode(HttpStatusCode.BadRequest)
responseType<String>()
description("Alle bruksenheter som kom i request tilhørte ikke bygningen")
}
}
}
}
Loading

0 comments on commit bb21ed9

Please sign in to comment.