-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
* wip kodelister * koder for egenregistrering * remove sql for kodelister, prefer runtime * better kodeliste routes with more use of generics * update kodelister to not have a short form code
- Loading branch information
1 parent
626d3e8
commit 2ce1cc6
Showing
7 changed files
with
183 additions
and
81 deletions.
There are no files selected for viewing
18 changes: 0 additions & 18 deletions
18
src/main/kotlin/no/kartverket/matrikkel/bygning/models/Egenregistrering.kt
This file was deleted.
Oops, something went wrong.
97 changes: 97 additions & 0 deletions
97
src/main/kotlin/no/kartverket/matrikkel/bygning/models/kodelister/EgenregistreringKoder.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
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 VannforsyningsKode( | ||
override val presentasjonsnavn: String, | ||
override val beskrivelse: String | ||
) : IKode { | ||
OffentligVannverk("Offentlig vannverk", "Bygget er tilknyttet offentlig vannverk"), | ||
TilknyttetPrivatVannverk( | ||
"Tilknyttet privat vannverk", | ||
"Bygget er tilknyttet privat vannverk. Privat vannverk er nett som forsyner mer enn 100 personer eller 20 husstander." | ||
), | ||
AnnenPrivatInnlagtVann( | ||
"Annen privat med innlagt vann", | ||
"Annen privat vannforsyning, bygget har innlagt vann" | ||
), | ||
AnnenPrivatIkkeInnlagtVann( | ||
"Annen privat men ikke innlagt vann", | ||
"Annen privat vannforsyning, bygget har ikke innlagt vann" | ||
) | ||
} | ||
|
||
@Serializable | ||
enum class AvlopsKode( | ||
override val presentasjonsnavn: String, | ||
override val beskrivelse: String | ||
) : IKode { | ||
OffentligKloakk("Offentlig kloakk", "Avløp er offentlig kloakk"), | ||
PrivatKloakk("Privat kloakk", "Avløp er privat kloakk"), | ||
IngenKloakk("Ingen kloakk", "Ingen tilknytning til kloakk") | ||
} | ||
|
||
@Serializable | ||
enum class EnergikildeKode( | ||
override val presentasjonsnavn: String, | ||
override val beskrivelse: String | ||
) : IKode { | ||
AnnenEnergikilde( | ||
"Annen energikilde", | ||
"Energikildekode for annen energikilde enn de som har ferdigdefinerte koder" | ||
), | ||
Biobrensel("Biobrensel", "Energikildekode for biobrensel"), | ||
Elektrisitet("Elektrisitet", "Energikildekode for elektrisitet"), | ||
Fjernvarme("Fjernvarme", "Energikildekode for fjernvarme"), | ||
Gass("Gass", "Energikildekode for gass"), | ||
OljeParafin("Olje eller parafin", "Energikildekode for olje eller parafin"), | ||
Solenergi("Solenergi", "Energikildekode for solenergi"), | ||
Varmepumpe("Varmepumpe", "Energikildekode for varmepumpe"), | ||
} | ||
|
||
@Serializable | ||
enum class OppvarmingsKode( | ||
override val presentasjonsnavn: String, | ||
override val beskrivelse: String | ||
) : IKode { | ||
Elektrisk("Elektrisk", "Elektrisk oppvarming"), | ||
Sentralvarme("Sentralvarme", "Sentralvarme"), | ||
AnnenOppvarming("Annen oppvarming", "Annen oppvarming") | ||
} | ||
|
||
@Serializable | ||
data class KodelisterResponse( | ||
val vannforsyningsKoder: List<Kode>, | ||
val avlopsKoder: List<Kode>, | ||
val energikildeKoder: List<Kode>, | ||
val oppvarmingsKoder: List<Kode>, | ||
) | ||
|
||
/* | ||
* 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 <reified T> KClass<T>.toKodeList(): List<Kode> where T : Enum<T>, T : IKode { | ||
return enumValues<T>().map { | ||
Kode( | ||
kode = it.name, | ||
presentasjonsnavn = it.presentasjonsnavn, | ||
beskrivelse = it.beskrivelse | ||
) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
75 changes: 75 additions & 0 deletions
75
src/main/kotlin/no/kartverket/matrikkel/bygning/routes/v1/KodelisteRoutes.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
package no.kartverket.matrikkel.bygning.routes.v1 | ||
|
||
import io.bkbn.kompendium.core.metadata.GetInfo | ||
import io.bkbn.kompendium.core.plugin.NotarizedRoute | ||
import io.ktor.http.* | ||
import io.ktor.server.application.* | ||
import io.ktor.server.response.* | ||
import io.ktor.server.routing.* | ||
import no.kartverket.matrikkel.bygning.models.kodelister.* | ||
import kotlin.reflect.KClass | ||
|
||
fun Route.kodelisteRouting() { | ||
route("/kodelister") { | ||
kodelisterDoc() | ||
get { | ||
call.respond( | ||
KodelisterResponse( | ||
energikildeKoder = EnergikildeKode::class.toKodeList(), | ||
vannforsyningsKoder = VannforsyningsKode::class.toKodeList(), | ||
avlopsKoder = AvlopsKode::class.toKodeList(), | ||
oppvarmingsKoder = OppvarmingsKode::class.toKodeList(), | ||
) | ||
) | ||
} | ||
|
||
kodelisteRoute("avlop", AvlopsKode::class) | ||
kodelisteRoute("oppvarming", OppvarmingsKode::class) | ||
kodelisteRoute("energikilde", EnergikildeKode::class) | ||
kodelisteRoute("vannforsyning", VannforsyningsKode::class) | ||
|
||
} | ||
} | ||
|
||
private inline fun <reified T> Route.kodelisteRoute( | ||
name: String, kodeClass: KClass<T> | ||
): Route where T : Enum<T>, T : IKode { | ||
return route(name) { | ||
kodelisteDoc(name) | ||
get { | ||
call.respond(kodeClass.toKodeList()) | ||
} | ||
} | ||
} | ||
|
||
private fun Route.kodelisterDoc() { | ||
install(NotarizedRoute()) { | ||
tags = setOf("Kodelister") | ||
get = GetInfo.builder { | ||
summary("Henter alle kodelister relatert til egenregistreringer") | ||
description("Henter alle kodelister relatert til egenregistreringer, med tilhørende kode, kodenavn, presentasjonsnavn og beskrivelse") | ||
|
||
response { | ||
responseCode(HttpStatusCode.OK) | ||
responseType<KodelisterResponse>() | ||
description("Kodelister") | ||
} | ||
} | ||
} | ||
} | ||
|
||
private fun Route.kodelisteDoc(name: String) { | ||
install(NotarizedRoute()) { | ||
tags = setOf("Kodelister") | ||
get = GetInfo.builder { | ||
summary("Henter kodeliste relatert til $name") | ||
description("Henter kodeliste relatert til $name, med tilhørende kode, kodenavn, presentasjonsnavn og beskrivelse") | ||
|
||
response { | ||
responseCode(HttpStatusCode.OK) | ||
responseType<List<Kode>>() | ||
description("Kodeliste for $name") | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,53 +1 @@ | ||
create schema if not exists bygning; | ||
|
||
create table if not exists oppvarming | ||
( | ||
id serial primary key, | ||
navn varchar(50) not null | ||
); | ||
|
||
create table if not exists energikilde | ||
( | ||
id serial primary key, | ||
navn varchar(50) not null | ||
); | ||
|
||
create table if not exists bygning | ||
( | ||
id varchar(50) primary key, | ||
byggeaar int, | ||
vann boolean not null, | ||
avlop boolean not null | ||
); | ||
|
||
create table if not exists bygning_oppvarminger | ||
( | ||
bygning_id varchar(50) not null, | ||
oppvarming_id int not null | ||
); | ||
|
||
create table if not exists bygning_energikilder | ||
( | ||
bygning_id varchar(50) not null, | ||
energikilde_id int not null | ||
); | ||
|
||
alter table bygning_oppvarminger | ||
add primary key (bygning_id, oppvarming_id); | ||
alter table bygning_energikilder | ||
add primary key (bygning_id, energikilde_id); | ||
|
||
insert into oppvarming (navn) | ||
values ('varmepumpe'); | ||
insert into energikilde (navn) | ||
values ('geotermisk'); | ||
|
||
insert into bygning (id, vann, avlop) | ||
values ('1', true, true); | ||
insert into bygning (id, byggeaar, vann, avlop) | ||
values ('2', 1983, true, false); | ||
|
||
insert into bygning_oppvarminger (bygning_id, oppvarming_id) | ||
values ('1', 1); | ||
insert into bygning_energikilder (bygning_id, energikilde_id) | ||
VALUES ('2', 1); | ||
create schema if not exists bygning; |