From 0d3e4264a2191d696e8de5aa1982f0d34f0802df Mon Sep 17 00:00:00 2001 From: Thomas Johansen Date: Wed, 11 Sep 2024 11:25:34 +0200 Subject: [PATCH] =?UTF-8?q?Omd=C3=B8ping=20av=20all=20kode=20for=20bekreft?= =?UTF-8?q?else-API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/bekreftelse-api/build.gradle.kts | 106 ++++++++++++++++++ .../api/Application.kt | 34 +++--- .../api/ApplicationInfo.kt | 2 +- .../api/Dependencies.kt | 47 ++++---- .../api/Health.kt | 2 +- .../api/config/ApplicationConfig.kt | 8 +- .../api/domain/BekreftelseRequest.kt} | 6 +- .../TilgjengeligeBekreftelserRequest.kt | 5 + .../TilgjengeligeBekreftelserResponse.kt | 24 ++++ .../api/kafka/BekreftelseHendelseProcessor.kt | 66 +++++++++++ .../api/kafka/BekreftelseProducer.kt} | 27 ++--- .../bekreftelse/api/kafka/InternStateSerde.kt | 29 +++++ .../nav/paw/bekreftelse/api/kafka/Topology.kt | 19 ++++ .../api/plugins/Authentication.kt | 4 +- .../api/plugins/HTTP.kt | 2 +- .../api/plugins/Logging.kt | 2 +- .../api/plugins/Metrics.kt | 2 +- .../api/plugins/Otel.kt | 2 +- .../api/plugins/Serialization.kt | 2 +- .../api/routes/BekreftelseRoutes.kt} | 75 ++++++++----- .../api/routes/HealthRoutes.kt | 4 +- .../api/routes/RequestScope.kt | 16 +-- .../bekreftelse/api/routes/SwaggerRoutes.kt | 8 ++ .../api/services/AutorisasjonService.kt | 8 +- .../api/utils/Claims.kt | 2 +- .../api/utils/Logger.kt | 4 +- .../api/utils/ObjectMapper.kt | 2 +- .../TilgjengeligRapporteringerRequest.kt | 5 - .../TilgjengeligeRapporteringerResponse.kt | 23 ---- .../kafka/RapporteringHendelseProcessor.kt | 61 ---------- .../RapporteringTilgjengeligStateSerde.kt | 28 ----- .../paw/rapportering/api/kafka/Topology.kt | 19 ---- .../rapportering/api/routes/SwaggerRoutes.kt | 8 -- .../resources/local/application_config.toml | 10 +- .../resources/nais/application_config.toml | 8 +- .../{rapporteringapi.yaml => docs.yaml} | 0 .../backup/brukerstoette/HttpClients.kt | 9 +- .../backup/initKtor.kt | 4 +- .../arbeidssoekerregisteret/app/Startup.kt | 4 +- .../arbeidssoekerregisteret/app/TestScope.kt | 2 +- .../utgang/pdl/clients/pdl/PdlClient.kt | 2 +- .../kotlin/no/nav/paw/config/env}/NaisEnv.kt | 6 +- ...ureAdMachineToMachineTokenClientFactory.kt | 1 + .../paw/kafkakeygenerator/client/Factory.kt | 3 +- 44 files changed, 413 insertions(+), 288 deletions(-) create mode 100644 apps/bekreftelse-api/build.gradle.kts rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/Application.kt (68%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/ApplicationInfo.kt (72%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/Dependencies.kt (73%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/Health.kt (98%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/config/ApplicationConfig.kt (83%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering/api/domain/request/RapporteringRequest.kt => bekreftelse/api/domain/BekreftelseRequest.kt} (66%) create mode 100644 apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/domain/TilgjengeligeBekreftelserRequest.kt create mode 100644 apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/domain/TilgjengeligeBekreftelserResponse.kt create mode 100644 apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/BekreftelseHendelseProcessor.kt rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering/api/kafka/RapporteringProducer.kt => bekreftelse/api/kafka/BekreftelseProducer.kt} (66%) create mode 100644 apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/InternStateSerde.kt create mode 100644 apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/Topology.kt rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/plugins/Authentication.kt (91%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/plugins/HTTP.kt (94%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/plugins/Logging.kt (88%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/plugins/Metrics.kt (96%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/plugins/Otel.kt (92%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/plugins/Serialization.kt (94%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering/api/routes/RapporteringRoutes.kt => bekreftelse/api/routes/BekreftelseRoutes.kt} (58%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/routes/HealthRoutes.kt (88%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/routes/RequestScope.kt (76%) create mode 100644 apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/SwaggerRoutes.kt rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/services/AutorisasjonService.kt (85%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/utils/Claims.kt (97%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/utils/Logger.kt (91%) rename apps/bekreftelse-api/src/main/kotlin/no/nav/paw/{rapportering => bekreftelse}/api/utils/ObjectMapper.kt (95%) delete mode 100644 apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/domain/request/TilgjengeligRapporteringerRequest.kt delete mode 100644 apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/domain/response/TilgjengeligeRapporteringerResponse.kt delete mode 100644 apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/RapporteringHendelseProcessor.kt delete mode 100644 apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/RapporteringTilgjengeligStateSerde.kt delete mode 100644 apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/Topology.kt delete mode 100644 apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/SwaggerRoutes.kt rename apps/bekreftelse-api/src/main/resources/openapi/{rapporteringapi.yaml => docs.yaml} (100%) rename lib/{kafka-key-generator-client/src/main/kotlin/no/nav/paw/kafkakeygenerator/auth => hoplite-config/src/main/kotlin/no/nav/paw/config/env}/NaisEnv.kt (54%) diff --git a/apps/bekreftelse-api/build.gradle.kts b/apps/bekreftelse-api/build.gradle.kts new file mode 100644 index 00000000..39811230 --- /dev/null +++ b/apps/bekreftelse-api/build.gradle.kts @@ -0,0 +1,106 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("jvm") + id("org.openapi.generator") + id("com.google.cloud.tools.jib") + application +} + +val jvmMajorVersion: String by project +val baseImage: String by project +val image: String? by project + +dependencies { + // Project + implementation(project(":lib:hoplite-config")) + implementation(project(":lib:kafka-streams")) + implementation(project(":lib:kafka-key-generator-client")) + implementation(project(":domain:bekreftelse-interne-hendelser")) + implementation(project(":domain:bekreftelsesmelding-schema")) + + // Server + implementation(ktorServer.bundles.withNettyAndMicrometer) + implementation(ktorServer.contentNegotiation) + implementation(ktorServer.statusPages) + implementation(ktorServer.cors) + implementation(ktorServer.callId) + implementation(ktorServer.auth) + + // Client + implementation(ktorClient.core) + implementation(ktorClient.cio) + implementation(ktorClient.contentNegotiation) + + // Serialization + implementation(ktor.serializationJackson) + implementation(ktor.serializationJson) + implementation(jackson.datatypeJsr310) + + // Authentication + implementation(navSecurity.tokenValidationKtorV2) + + // Authorization + implementation(poao.tilgangClient) + + // Documentation + implementation(ktorServer.swagger) + + // Logging + implementation(loggingLibs.logbackClassic) + implementation(loggingLibs.logstashLogbackEncoder) + implementation(navCommon.log) + implementation(navCommon.auditLog) + + // Instrumentation + implementation(micrometer.registryPrometheus) + implementation(otel.api) + implementation(otel.annotations) + + // Kafka + implementation(orgApacheKafka.kafkaStreams) + implementation(apacheAvro.kafkaStreamsAvroSerde) + + // Test + testImplementation(ktorServer.testJvm) + testImplementation(testLibs.bundles.withUnitTesting) +} + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(jvmMajorVersion)) + } +} + +application { + mainClass.set("no.nav.paw.rapportering.api.ApplicationKt") +} + +tasks.withType().configureEach { + useJUnitPlatform() +} + +tasks.withType().configureEach { + compilerOptions { + freeCompilerArgs.add("-Xcontext-receivers") + } +} + +tasks.withType(Jar::class) { + manifest { + attributes["Implementation-Version"] = project.version + attributes["Main-Class"] = application.mainClass.get() + attributes["Implementation-Title"] = rootProject.name + } +} + +jib { + from.image = "$baseImage:$jvmMajorVersion" + to.image = "${image ?: project.name}:${project.version}" + container { + environment = mapOf( + "IMAGE_WITH_VERSION" to "${image ?: project.name}:${project.version}" + ) + jvmFlags = listOf("-XX:ActiveProcessorCount=4", "-XX:+UseZGC", "-XX:+ZGenerational") + } +} diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/Application.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Application.kt similarity index 68% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/Application.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Application.kt index 487e4ddc..cb024c0d 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/Application.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Application.kt @@ -1,4 +1,4 @@ -package no.nav.paw.rapportering.api +package no.nav.paw.bekreftelse.api import io.ktor.server.application.Application import io.ktor.server.engine.addShutdownHook @@ -11,17 +11,17 @@ import no.nav.paw.config.kafka.KAFKA_STREAMS_CONFIG_WITH_SCHEME_REG import no.nav.paw.config.kafka.KafkaConfig import no.nav.paw.kafkakeygenerator.auth.AzureM2MConfig import no.nav.paw.kafkakeygenerator.client.KafkaKeyConfig -import no.nav.paw.rapportering.api.config.APPLICATION_CONFIG_FILE_NAME -import no.nav.paw.rapportering.api.config.ApplicationConfig -import no.nav.paw.rapportering.api.plugins.configureAuthentication -import no.nav.paw.rapportering.api.plugins.configureHTTP -import no.nav.paw.rapportering.api.plugins.configureLogging -import no.nav.paw.rapportering.api.plugins.configureMetrics -import no.nav.paw.rapportering.api.plugins.configureOtel -import no.nav.paw.rapportering.api.plugins.configureSerialization -import no.nav.paw.rapportering.api.routes.healthRoutes -import no.nav.paw.rapportering.api.routes.rapporteringRoutes -import no.nav.paw.rapportering.api.routes.swaggerRoutes +import no.nav.paw.bekreftelse.api.config.APPLICATION_CONFIG_FILE_NAME +import no.nav.paw.bekreftelse.api.config.ApplicationConfig +import no.nav.paw.bekreftelse.api.plugins.configureAuthentication +import no.nav.paw.bekreftelse.api.plugins.configureHTTP +import no.nav.paw.bekreftelse.api.plugins.configureLogging +import no.nav.paw.bekreftelse.api.plugins.configureMetrics +import no.nav.paw.bekreftelse.api.plugins.configureOtel +import no.nav.paw.bekreftelse.api.plugins.configureSerialization +import no.nav.paw.bekreftelse.api.routes.healthRoutes +import no.nav.paw.bekreftelse.api.routes.bekreftelseRoutes +import no.nav.paw.bekreftelse.api.routes.swaggerRoutes import org.slf4j.LoggerFactory fun main() { @@ -64,13 +64,13 @@ fun Application.module( routing { healthRoutes(dependencies.prometheusMeterRegistry, dependencies.health) swaggerRoutes() - rapporteringRoutes( - kafkaKeyClient = dependencies.kafkaKeyClient, - rapporteringStateStore = dependencies.rapporteringStateStore, - rapporteringStateStoreName = applicationConfig.rapporteringStateStoreName, + bekreftelseRoutes( + kafkaKeyClient = dependencies.kafkaKeysClient, + bekreftelseStateStore = dependencies.bekreftelseStateStore, + stateStoreName = applicationConfig.bekreftelseStateStoreName, kafkaStreams = dependencies.kafkaStreams, httpClient = dependencies.httpClient, - rapporteringProducer = dependencies.rapporteringProducer, + bekreftelseProducer = dependencies.bekreftelseProducer, autorisasjonService = dependencies.autorisasjonService ) } diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/ApplicationInfo.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/ApplicationInfo.kt similarity index 72% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/ApplicationInfo.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/ApplicationInfo.kt index 8caca816..a9bb7fb3 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/ApplicationInfo.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/ApplicationInfo.kt @@ -1,4 +1,4 @@ -package no.nav.paw.rapportering.api +package no.nav.paw.bekreftelse.api object ApplicationInfo { val id = System.getenv("IMAGE_WITH_VERSION") ?: "UNSPECIFIED" diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/Dependencies.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Dependencies.kt similarity index 73% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/Dependencies.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Dependencies.kt index f90dfe61..87e743fa 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/Dependencies.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Dependencies.kt @@ -1,24 +1,24 @@ -package no.nav.paw.rapportering.api +package no.nav.paw.bekreftelse.api import io.confluent.kafka.streams.serdes.avro.SpecificAvroSerde import io.ktor.client.HttpClient import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.serialization.jackson.jackson -import io.micrometer.prometheusmetrics.PrometheusMeterRegistry import io.micrometer.prometheusmetrics.PrometheusConfig +import io.micrometer.prometheusmetrics.PrometheusMeterRegistry import no.nav.paw.config.kafka.KafkaConfig import no.nav.paw.config.kafka.streams.KafkaStreamsFactory import no.nav.paw.kafkakeygenerator.auth.AzureM2MConfig import no.nav.paw.kafkakeygenerator.auth.azureAdM2MTokenClient import no.nav.paw.kafkakeygenerator.client.KafkaKeyConfig import no.nav.paw.kafkakeygenerator.client.KafkaKeysClient -import no.nav.paw.kafkakeygenerator.client.kafkaKeysKlient -import no.nav.paw.rapportering.api.config.ApplicationConfig -import no.nav.paw.rapportering.api.kafka.RapporteringProducer -import no.nav.paw.rapportering.api.kafka.RapporteringTilgjengeligState -import no.nav.paw.rapportering.api.kafka.RapporteringTilgjengeligStateSerde -import no.nav.paw.rapportering.api.kafka.appTopology -import no.nav.paw.rapportering.api.services.AutorisasjonService +import no.nav.paw.kafkakeygenerator.client.kafkaKeysClient +import no.nav.paw.bekreftelse.api.config.ApplicationConfig +import no.nav.paw.bekreftelse.api.kafka.BekreftelseProducer +import no.nav.paw.bekreftelse.api.kafka.InternState +import no.nav.paw.bekreftelse.api.kafka.InternStateSerde +import no.nav.paw.bekreftelse.api.kafka.appTopology +import no.nav.paw.bekreftelse.api.services.AutorisasjonService import no.nav.poao_tilgang.client.PoaoTilgangCachedClient import no.nav.poao_tilgang.client.PoaoTilgangHttpClient import org.apache.kafka.common.serialization.Serdes @@ -41,7 +41,8 @@ fun createDependencies( val logger = LoggerFactory.getLogger("rapportering-api") val azureM2MTokenClient = azureAdM2MTokenClient(applicationConfig.naisEnv, azureM2MConfig) - val kafkaKeyClient = kafkaKeysKlient(kafkaKeyConfig) { + + val kafkaKeysClient = kafkaKeysClient(kafkaKeyConfig) { azureM2MTokenClient.createMachineToMachineToken(kafkaKeyConfig.scope) } @@ -60,16 +61,16 @@ fun createDependencies( val streamsBuilder = StreamsBuilder() .addStateStore( Stores.keyValueStoreBuilder( - Stores.persistentKeyValueStore(applicationConfig.rapporteringStateStoreName), + Stores.persistentKeyValueStore(applicationConfig.bekreftelseStateStoreName), Serdes.Long(), - RapporteringTilgjengeligStateSerde(), + InternStateSerde(), ) ) val topology = streamsBuilder.appTopology( prometheusRegistry = prometheusMeterRegistry, - rapporteringHendelseLoggTopic = applicationConfig.rapporteringHendelseLoggTopic, - rapporteringStateStoreName = applicationConfig.rapporteringStateStoreName, + bekreftelseHendelseLoggTopic = applicationConfig.bekreftelseHendelseLoggTopic, + bekreftelseStateStoreName = applicationConfig.bekreftelseStateStoreName, ) val kafkaStreams = KafkaStreams( @@ -86,16 +87,16 @@ fun createDependencies( kafkaStreams.start() - val rapporteringStateStore: ReadOnlyKeyValueStore = kafkaStreams.store( + val bekreftelseStateStore: ReadOnlyKeyValueStore = kafkaStreams.store( StoreQueryParameters.fromNameAndType( - applicationConfig.rapporteringStateStoreName, + applicationConfig.bekreftelseStateStoreName, QueryableStoreTypes.keyValueStore() ) ) val health = Health(kafkaStreams) - val rapporteringProducer = RapporteringProducer(kafkaConfig, applicationConfig) + val bekreftelseProducer = BekreftelseProducer(kafkaConfig, applicationConfig) val poaoTilgangClient = PoaoTilgangCachedClient( @@ -108,24 +109,24 @@ fun createDependencies( val autorisasjonService = AutorisasjonService(poaoTilgangClient) return Dependencies( - kafkaKeyClient, + kafkaKeysClient, httpClient, kafkaStreams, prometheusMeterRegistry, - rapporteringStateStore, + bekreftelseStateStore, health, - rapporteringProducer, + bekreftelseProducer, autorisasjonService ) } data class Dependencies( - val kafkaKeyClient: KafkaKeysClient, + val kafkaKeysClient: KafkaKeysClient, val httpClient: HttpClient, val kafkaStreams: KafkaStreams, val prometheusMeterRegistry: PrometheusMeterRegistry, - val rapporteringStateStore: ReadOnlyKeyValueStore, + val bekreftelseStateStore: ReadOnlyKeyValueStore, val health: Health, - val rapporteringProducer: RapporteringProducer, + val bekreftelseProducer: BekreftelseProducer, val autorisasjonService: AutorisasjonService ) \ No newline at end of file diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/Health.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Health.kt similarity index 98% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/Health.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Health.kt index e1f0e681..38ed2b23 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/Health.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Health.kt @@ -1,4 +1,4 @@ -package no.nav.paw.rapportering.api +package no.nav.paw.bekreftelse.api import io.ktor.http.HttpStatusCode import org.apache.kafka.streams.KafkaStreams diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/config/ApplicationConfig.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/config/ApplicationConfig.kt similarity index 83% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/config/ApplicationConfig.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/config/ApplicationConfig.kt index 6d3d619f..21c4ac88 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/config/ApplicationConfig.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/config/ApplicationConfig.kt @@ -1,4 +1,4 @@ -package no.nav.paw.rapportering.api.config +package no.nav.paw.bekreftelse.api.config import no.nav.paw.config.env.NaisEnv import no.nav.paw.config.env.currentNaisEnv @@ -9,9 +9,9 @@ const val APPLICATION_CONFIG_FILE_NAME = "application_config.toml" data class ApplicationConfig( val applicationIdSuffix: String, val producerId: String, - val rapporteringTopic: String, - val rapporteringHendelseLoggTopic: String, - val rapporteringStateStoreName: String, + val bekreftelseTopic: String, + val bekreftelseHendelseLoggTopic: String, + val bekreftelseStateStoreName: String, val authProviders: AuthProviders, val naisEnv: NaisEnv = currentNaisEnv, val hostname: String = InetAddress.getLocalHost().hostName, diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/domain/request/RapporteringRequest.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/domain/BekreftelseRequest.kt similarity index 66% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/domain/request/RapporteringRequest.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/domain/BekreftelseRequest.kt index a7396e4e..27cbd080 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/domain/request/RapporteringRequest.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/domain/BekreftelseRequest.kt @@ -1,11 +1,11 @@ -package no.nav.paw.rapportering.api.domain.request +package no.nav.paw.bekreftelse.api.domain import java.util.* -data class RapporteringRequest( +data class BekreftelseRequest( // Identitetsnummer må sendes med hvis det er en veileder som rapporterer val identitetsnummer: String? = null, - val rapporteringsId: UUID, + val bekreftelseId: UUID, val harJobbetIDennePerioden: Boolean, val vilFortsetteSomArbeidssoeker: Boolean ) \ No newline at end of file diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/domain/TilgjengeligeBekreftelserRequest.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/domain/TilgjengeligeBekreftelserRequest.kt new file mode 100644 index 00000000..1c4f401c --- /dev/null +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/domain/TilgjengeligeBekreftelserRequest.kt @@ -0,0 +1,5 @@ +package no.nav.paw.bekreftelse.api.domain + +data class TilgjengeligeBekreftelserRequest( + val identitetsnummer: String? +) \ No newline at end of file diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/domain/TilgjengeligeBekreftelserResponse.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/domain/TilgjengeligeBekreftelserResponse.kt new file mode 100644 index 00000000..90620ca7 --- /dev/null +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/domain/TilgjengeligeBekreftelserResponse.kt @@ -0,0 +1,24 @@ +package no.nav.paw.bekreftelse.api.domain + +import java.time.Instant +import java.util.* + +data class TilgjengeligBekreftelse( + val periodeId: UUID, + val bekreftelseId: UUID, + val gjelderFra: Instant, + val gjelderTil: Instant, +) + +typealias TilgjengeligBekreftelserResponse = List + +fun List.toResponse(): TilgjengeligBekreftelserResponse = + this.map { + TilgjengeligBekreftelse( + periodeId = it.periodeId, + bekreftelseId = it.bekreftelseId, + gjelderFra = it.gjelderFra, + gjelderTil = it.gjelderTil + ) + } + diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/BekreftelseHendelseProcessor.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/BekreftelseHendelseProcessor.kt new file mode 100644 index 00000000..289921e6 --- /dev/null +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/BekreftelseHendelseProcessor.kt @@ -0,0 +1,66 @@ +package no.nav.paw.bekreftelse.api.kafka + +import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelse +import no.nav.paw.bekreftelse.internehendelser.BekreftelseMeldingMottatt +import no.nav.paw.bekreftelse.internehendelser.BekreftelseTilgjengelig +import no.nav.paw.bekreftelse.internehendelser.PeriodeAvsluttet +import org.apache.kafka.streams.kstream.KStream +import org.apache.kafka.streams.kstream.Named +import org.apache.kafka.streams.processor.api.Processor +import org.apache.kafka.streams.processor.api.ProcessorContext +import org.apache.kafka.streams.processor.api.Record +import org.apache.kafka.streams.state.KeyValueStore + +fun KStream.oppdaterBekreftelseHendelseState( + stateStoreName: String +): KStream { + val processor = { + BekreftelseHendelseProcessor(stateStoreName) + } + return process(processor, Named.`as`("bekreftelseHendelseProcessor"), stateStoreName) +} + +class BekreftelseHendelseProcessor( + private val stateStoreName: String, +) : Processor { + private var stateStore: KeyValueStore? = null + private var context: ProcessorContext? = null + + override fun init(context: ProcessorContext?) { + super.init(context) + this.context = context + stateStore = context?.getStateStore(stateStoreName) + } + + override fun process(record: Record?) { + val value = record?.value() ?: return + val hendelseStore = requireNotNull(stateStore) { "State store is not initialized" } + when (value) { + is BekreftelseTilgjengelig -> { + hendelseStore.get(value.arbeidssoekerId)?.let { + hendelseStore.put( + value.arbeidssoekerId, + InternState(it.tilgjendeligeBekreftelser.plus(value)) + ) + } ?: hendelseStore.put(value.arbeidssoekerId, InternState(listOf(value))) + } + + is BekreftelseMeldingMottatt -> { + hendelseStore.get(value.arbeidssoekerId)?.let { state -> + state.tilgjendeligeBekreftelser + .filterNot { it.bekreftelseId == value.bekreftelseId } + .let { bekreftelser -> + if (bekreftelser.isEmpty()) hendelseStore.delete(value.arbeidssoekerId) + else hendelseStore.put(value.arbeidssoekerId, InternState(bekreftelser)) + } + } + } + + is PeriodeAvsluttet -> { + hendelseStore.get(value.arbeidssoekerId)?.let { + hendelseStore.delete(value.arbeidssoekerId) + } + } + } + } +} \ No newline at end of file diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/RapporteringProducer.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/BekreftelseProducer.kt similarity index 66% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/RapporteringProducer.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/BekreftelseProducer.kt index 362fa4c5..3f9c71d5 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/RapporteringProducer.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/BekreftelseProducer.kt @@ -1,24 +1,19 @@ -package no.nav.paw.rapportering.api.kafka +package no.nav.paw.bekreftelse.api.kafka import io.confluent.kafka.streams.serdes.avro.SpecificAvroSerde +import no.nav.paw.bekreftelse.api.config.ApplicationConfig +import no.nav.paw.bekreftelse.api.domain.BekreftelseRequest +import no.nav.paw.bekreftelse.api.utils.logger +import no.nav.paw.bekreftelse.internehendelser.BekreftelseTilgjengelig import no.nav.paw.config.kafka.KafkaConfig import no.nav.paw.config.kafka.KafkaFactory import no.nav.paw.config.kafka.sendDeferred -import no.nav.paw.rapportering.api.ApplicationInfo -import no.nav.paw.rapportering.api.config.ApplicationConfig -import no.nav.paw.rapportering.api.domain.request.RapporteringRequest -import no.nav.paw.rapportering.api.utils.logger -import no.nav.paw.rapportering.internehendelser.RapporteringTilgjengelig import no.nav.paw.rapportering.melding.v1.Melding -import no.nav.paw.rapportering.melding.v1.vo.Bruker -import no.nav.paw.rapportering.melding.v1.vo.Metadata -import no.nav.paw.rapportering.melding.v1.vo.Svar import org.apache.kafka.clients.producer.Producer import org.apache.kafka.clients.producer.ProducerRecord import org.apache.kafka.common.serialization.LongSerializer -import java.time.Instant -class RapporteringProducer( +class BekreftelseProducer( private val kafkaConfig: KafkaConfig, private val applicationConfig: ApplicationConfig, ) { @@ -42,7 +37,7 @@ class RapporteringProducer( } suspend fun produceMessage(key: Long, message: Melding) { - val topic = applicationConfig.rapporteringTopic + val topic = applicationConfig.bekreftelseTopic val record = ProducerRecord(topic, key, message) val recordMetadata = producer.sendDeferred(record).await() logger.trace("Sendte melding til kafka: offset={}", recordMetadata.offset()) @@ -53,8 +48,8 @@ class RapporteringProducer( } } -fun createMelding(state: RapporteringTilgjengelig, rapportering: RapporteringRequest): Melding = TODO() - //Melding.newBuilder() +fun createMelding(state: BekreftelseTilgjengelig, bekreftelse: BekreftelseRequest): Melding = TODO() +//Melding.newBuilder() // .setId(ApplicationInfo.id) // .setNamespace("paw") // .setPeriodeId(state.periodeId) @@ -66,6 +61,6 @@ fun createMelding(state: RapporteringTilgjengelig, rapportering: RapporteringReq // )) // .setGjelderFra(state.gjelderFra) // .setGjelderTil(state.gjelderTil) -// .setVilFortsetteSomArbeidssoeker(rapportering.vilFortsetteSomArbeidssoeker) -// .setHarJobbetIDennePerioden(rapportering.harJobbetIDennePerioden) +// .setVilFortsetteSomArbeidssoeker(bekreftelse.vilFortsetteSomArbeidssoeker) +// .setHarJobbetIDennePerioden(bekreftelse.harJobbetIDennePerioden) // .build() diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/InternStateSerde.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/InternStateSerde.kt new file mode 100644 index 00000000..4a1476b4 --- /dev/null +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/InternStateSerde.kt @@ -0,0 +1,29 @@ +package no.nav.paw.bekreftelse.api.kafka + +import no.nav.paw.bekreftelse.api.utils.JsonUtil +import no.nav.paw.bekreftelse.internehendelser.BekreftelseTilgjengelig +import org.apache.kafka.common.serialization.Deserializer +import org.apache.kafka.common.serialization.Serde +import org.apache.kafka.common.serialization.Serializer + +data class InternState( + val tilgjendeligeBekreftelser: List +) + +class InternStateSerde : Serde { + override fun serializer() = InternStateSerializer() + override fun deserializer(): Deserializer = + InternStateDeserializer() +} + +class InternStateSerializer : Serializer { + override fun serialize(topic: String?, data: InternState?): ByteArray { + return JsonUtil.objectMapper.writeValueAsBytes(data) + } +} + +class InternStateDeserializer : Deserializer { + override fun deserialize(topic: String?, data: ByteArray?): InternState? { + return JsonUtil.objectMapper.readValue(data, InternState::class.java) + } +} diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/Topology.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/Topology.kt new file mode 100644 index 00000000..3c03eb2a --- /dev/null +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/kafka/Topology.kt @@ -0,0 +1,19 @@ +package no.nav.paw.bekreftelse.api.kafka + +import io.micrometer.prometheusmetrics.PrometheusMeterRegistry +import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelseSerde +import org.apache.kafka.common.serialization.Serdes +import org.apache.kafka.streams.StreamsBuilder +import org.apache.kafka.streams.Topology +import org.apache.kafka.streams.kstream.Consumed + +fun StreamsBuilder.appTopology( + prometheusRegistry: PrometheusMeterRegistry, + bekreftelseHendelseLoggTopic: String, + bekreftelseStateStoreName: String, +): Topology { + stream(bekreftelseHendelseLoggTopic, Consumed.with(Serdes.Long(), BekreftelseHendelseSerde())) + .oppdaterBekreftelseHendelseState(bekreftelseStateStoreName) + + return build() +} \ No newline at end of file diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Authentication.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Authentication.kt similarity index 91% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Authentication.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Authentication.kt index 382b0305..a9cd50e0 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Authentication.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Authentication.kt @@ -1,8 +1,8 @@ -package no.nav.paw.rapportering.api.plugins +package no.nav.paw.bekreftelse.api.plugins import io.ktor.server.application.Application import io.ktor.server.auth.authentication -import no.nav.paw.rapportering.api.config.AuthProviders +import no.nav.paw.bekreftelse.api.config.AuthProviders import no.nav.security.token.support.v2.IssuerConfig import no.nav.security.token.support.v2.RequiredClaims import no.nav.security.token.support.v2.TokenSupportConfig diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/HTTP.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/HTTP.kt similarity index 94% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/HTTP.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/HTTP.kt index 173f8d27..5f2a485f 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/HTTP.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/HTTP.kt @@ -1,4 +1,4 @@ -package no.nav.paw.rapportering.api.plugins +package no.nav.paw.bekreftelse.api.plugins import io.ktor.server.application.Application import io.ktor.server.application.install diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Logging.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Logging.kt similarity index 88% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Logging.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Logging.kt index b5387ec2..46f295c9 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Logging.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Logging.kt @@ -1,4 +1,4 @@ -package no.nav.paw.rapportering.api.plugins +package no.nav.paw.bekreftelse.api.plugins import io.ktor.server.application.Application import io.ktor.server.application.install diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Metrics.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Metrics.kt similarity index 96% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Metrics.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Metrics.kt index 383f7747..a2e34f4e 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Metrics.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Metrics.kt @@ -1,4 +1,4 @@ -package no.nav.paw.rapportering.api.plugins +package no.nav.paw.bekreftelse.api.plugins import io.ktor.server.application.Application import io.ktor.server.application.install diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Otel.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Otel.kt similarity index 92% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Otel.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Otel.kt index e269c125..50a40032 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Otel.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Otel.kt @@ -1,4 +1,4 @@ -package no.nav.paw.rapportering.api.plugins +package no.nav.paw.bekreftelse.api.plugins import io.ktor.server.application.Application import io.ktor.server.application.createApplicationPlugin diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Serialization.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Serialization.kt similarity index 94% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Serialization.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Serialization.kt index cb0a9f1f..d9545f2e 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/plugins/Serialization.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/plugins/Serialization.kt @@ -1,4 +1,4 @@ -package no.nav.paw.rapportering.api.plugins +package no.nav.paw.bekreftelse.api.plugins import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.SerializationFeature diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/RapporteringRoutes.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/BekreftelseRoutes.kt similarity index 58% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/RapporteringRoutes.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/BekreftelseRoutes.kt index b7b9c9d6..922de63f 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/RapporteringRoutes.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/BekreftelseRoutes.kt @@ -1,49 +1,51 @@ -package no.nav.paw.rapportering.api.routes +package no.nav.paw.bekreftelse.api.routes import io.ktor.client.HttpClient -import io.ktor.client.call.* +import io.ktor.client.call.body import io.ktor.client.request.bearerAuth import io.ktor.client.request.post import io.ktor.client.request.setBody import io.ktor.http.HttpStatusCode import io.ktor.server.application.call -import io.ktor.server.auth.* +import io.ktor.server.auth.authenticate import io.ktor.server.response.respond -import io.ktor.server.routing.* +import io.ktor.server.routing.Route +import io.ktor.server.routing.post +import io.ktor.server.routing.route +import no.nav.paw.bekreftelse.api.domain.BekreftelseRequest +import no.nav.paw.bekreftelse.api.domain.TilgjengeligBekreftelserResponse +import no.nav.paw.bekreftelse.api.domain.TilgjengeligeBekreftelserRequest +import no.nav.paw.bekreftelse.api.domain.toResponse +import no.nav.paw.bekreftelse.api.kafka.BekreftelseProducer +import no.nav.paw.bekreftelse.api.kafka.InternState +import no.nav.paw.bekreftelse.api.kafka.createMelding +import no.nav.paw.bekreftelse.api.services.AutorisasjonService +import no.nav.paw.bekreftelse.api.utils.logger import no.nav.paw.kafkakeygenerator.client.KafkaKeysClient -import no.nav.paw.rapportering.api.domain.request.RapporteringRequest -import no.nav.paw.rapportering.api.domain.request.TilgjengeligeRapporteringerRequest -import no.nav.paw.rapportering.api.domain.response.TilgjengeligRapporteringerResponse -import no.nav.paw.rapportering.api.domain.response.toResponse -import no.nav.paw.rapportering.api.kafka.RapporteringProducer -import no.nav.paw.rapportering.api.kafka.RapporteringTilgjengeligState -import no.nav.paw.rapportering.api.kafka.createMelding -import no.nav.paw.rapportering.api.services.AutorisasjonService -import no.nav.paw.rapportering.api.utils.logger import no.nav.poao_tilgang.client.TilgangType import org.apache.kafka.common.serialization.Serdes import org.apache.kafka.streams.KafkaStreams import org.apache.kafka.streams.KeyQueryMetadata import org.apache.kafka.streams.state.ReadOnlyKeyValueStore -fun Route.rapporteringRoutes( +fun Route.bekreftelseRoutes( kafkaKeyClient: KafkaKeysClient, - rapporteringStateStoreName: String, - rapporteringStateStore: ReadOnlyKeyValueStore, + stateStoreName: String, + bekreftelseStateStore: ReadOnlyKeyValueStore, kafkaStreams: KafkaStreams, httpClient: HttpClient, - rapporteringProducer: RapporteringProducer, + bekreftelseProducer: BekreftelseProducer, autorisasjonService: AutorisasjonService ) { route("/api/v1") { authenticate("tokenx", "azure") { - post("/tilgjengelige-rapporteringer") { request -> + post("/tilgjengelige-rapporteringer") { request -> with(requestScope(request.identitetsnummer, autorisasjonService, kafkaKeyClient, TilgangType.LESE)) { val arbeidssoekerId = this - rapporteringStateStore + bekreftelseStateStore .get(arbeidssoekerId) - ?.rapporteringer + ?.tilgjendeligeBekreftelser ?.toResponse() ?.let { rapporteringerTilgjengelig -> logger.info("Fant ${rapporteringerTilgjengelig.size} rapporteringer") @@ -51,14 +53,18 @@ fun Route.rapporteringRoutes( } val metadata = kafkaStreams.queryMetadataForKey( - rapporteringStateStoreName, arbeidssoekerId, Serdes.Long().serializer() + stateStoreName, arbeidssoekerId, Serdes.Long().serializer() ) if (metadata == null || metadata == KeyQueryMetadata.NOT_AVAILABLE) { logger.info("Fant ikke metadata for arbeidsoeker, $metadata") - return@post call.respond(HttpStatusCode.OK, emptyList()) + return@post call.respond(HttpStatusCode.OK, emptyList()) } else { - val response = httpClient.post("http://${metadata.activeHost().host()}/api/v1/tilgjengelige-rapporteringer") { + val response = httpClient.post( + "http://${ + metadata.activeHost().host() + }/api/v1/tilgjengelige-rapporteringer" + ) { call.request.headers["Authorization"]?.let { bearerAuth(it) } setBody(request) } @@ -67,24 +73,31 @@ fun Route.rapporteringRoutes( } } - post("/rapportering") { rapportering -> - with(requestScope(rapportering.identitetsnummer, autorisasjonService, kafkaKeyClient, TilgangType.SKRIVE)) { + post("/rapportering") { rapportering -> + with( + requestScope( + rapportering.identitetsnummer, + autorisasjonService, + kafkaKeyClient, + TilgangType.SKRIVE + ) + ) { val arbeidsoekerId = this - rapporteringStateStore + bekreftelseStateStore .get(arbeidsoekerId) - ?.rapporteringer - ?.firstOrNull { it.rapporteringsId == rapportering.rapporteringsId } + ?.tilgjendeligeBekreftelser + ?.firstOrNull { it.bekreftelseId == rapportering.bekreftelseId } ?.let { - logger.info("Rapportering med id ${rapportering.rapporteringsId} funnet") + logger.info("Rapportering med id ${rapportering.bekreftelseId} funnet") val rapporteringsMelding = createMelding(it, rapportering) - rapporteringProducer.produceMessage(arbeidsoekerId, rapporteringsMelding) + bekreftelseProducer.produceMessage(arbeidsoekerId, rapporteringsMelding) return@post call.respond(HttpStatusCode.OK) } val metadata = kafkaStreams.queryMetadataForKey( - rapporteringStateStoreName, arbeidsoekerId, Serdes.Long().serializer() + stateStoreName, arbeidsoekerId, Serdes.Long().serializer() ) if (metadata == null || metadata == KeyQueryMetadata.NOT_AVAILABLE) { diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/HealthRoutes.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/HealthRoutes.kt similarity index 88% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/HealthRoutes.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/HealthRoutes.kt index 72e1a3cd..f8cd444e 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/HealthRoutes.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/HealthRoutes.kt @@ -1,11 +1,11 @@ -package no.nav.paw.rapportering.api.routes +package no.nav.paw.bekreftelse.api.routes import io.ktor.server.application.call import io.ktor.server.response.respond import io.ktor.server.routing.Routing import io.ktor.server.routing.get import io.micrometer.prometheusmetrics.PrometheusMeterRegistry -import no.nav.paw.rapportering.api.Health +import no.nav.paw.bekreftelse.api.Health fun Routing.healthRoutes(prometheusMeterRegistry: PrometheusMeterRegistry, health: Health) { get("/internal/isAlive") { diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/RequestScope.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/RequestScope.kt similarity index 76% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/RequestScope.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/RequestScope.kt index 15de4286..c6ac9b3d 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/RequestScope.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/RequestScope.kt @@ -1,17 +1,17 @@ -package no.nav.paw.rapportering.api.routes +package no.nav.paw.bekreftelse.api.routes import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.response.* import io.ktor.util.pipeline.PipelineContext import no.nav.paw.kafkakeygenerator.client.KafkaKeysClient -import no.nav.paw.rapportering.api.services.AutorisasjonService -import no.nav.paw.rapportering.api.services.NavAnsatt -import no.nav.paw.rapportering.api.utils.getClaims -import no.nav.paw.rapportering.api.utils.getNAVident -import no.nav.paw.rapportering.api.utils.getOid -import no.nav.paw.rapportering.api.utils.getPid -import no.nav.paw.rapportering.api.utils.isAzure +import no.nav.paw.bekreftelse.api.services.AutorisasjonService +import no.nav.paw.bekreftelse.api.services.NavAnsatt +import no.nav.paw.bekreftelse.api.utils.getClaims +import no.nav.paw.bekreftelse.api.utils.getNAVident +import no.nav.paw.bekreftelse.api.utils.getOid +import no.nav.paw.bekreftelse.api.utils.getPid +import no.nav.paw.bekreftelse.api.utils.isAzure import no.nav.poao_tilgang.client.TilgangType diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/SwaggerRoutes.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/SwaggerRoutes.kt new file mode 100644 index 00000000..afc4de6a --- /dev/null +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/SwaggerRoutes.kt @@ -0,0 +1,8 @@ +package no.nav.paw.bekreftelse.api.routes + +import io.ktor.server.plugins.swagger.swaggerUI +import io.ktor.server.routing.Route + +fun Route.swaggerRoutes() { + swaggerUI(path = "docs", swaggerFile = "openapi/docs.yaml") +} \ No newline at end of file diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/services/AutorisasjonService.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/AutorisasjonService.kt similarity index 85% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/services/AutorisasjonService.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/AutorisasjonService.kt index ff177374..1da50c87 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/services/AutorisasjonService.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/AutorisasjonService.kt @@ -1,8 +1,8 @@ -package no.nav.paw.rapportering.api.services +package no.nav.paw.bekreftelse.api.services -import no.nav.paw.rapportering.api.utils.auditLogMelding -import no.nav.paw.rapportering.api.utils.auditLogger -import no.nav.paw.rapportering.api.utils.logger +import no.nav.paw.bekreftelse.api.utils.auditLogMelding +import no.nav.paw.bekreftelse.api.utils.auditLogger +import no.nav.paw.bekreftelse.api.utils.logger import no.nav.poao_tilgang.client.NavAnsattTilgangTilEksternBrukerPolicyInput import no.nav.poao_tilgang.client.PoaoTilgangCachedClient import no.nav.poao_tilgang.client.TilgangType diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/utils/Claims.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/Claims.kt similarity index 97% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/utils/Claims.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/Claims.kt index 15f29b2e..650d1d5b 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/utils/Claims.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/Claims.kt @@ -1,4 +1,4 @@ -package no.nav.paw.rapportering.api.utils +package no.nav.paw.bekreftelse.api.utils import io.ktor.server.application.* import io.ktor.server.auth.* diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/utils/Logger.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/Logger.kt similarity index 91% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/utils/Logger.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/Logger.kt index 19c89087..7f4ebd60 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/utils/Logger.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/Logger.kt @@ -1,6 +1,6 @@ -package no.nav.paw.rapportering.api.utils +package no.nav.paw.bekreftelse.api.utils -import no.nav.paw.rapportering.api.services.NavAnsatt +import no.nav.paw.bekreftelse.api.services.NavAnsatt import no.nav.common.audit_log.cef.CefMessage import no.nav.common.audit_log.cef.CefMessageEvent import no.nav.common.audit_log.cef.CefMessageSeverity diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/utils/ObjectMapper.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/ObjectMapper.kt similarity index 95% rename from apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/utils/ObjectMapper.kt rename to apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/ObjectMapper.kt index 15b846e1..e2b1f631 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/utils/ObjectMapper.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/ObjectMapper.kt @@ -1,4 +1,4 @@ -package no.nav.paw.rapportering.api.utils +package no.nav.paw.bekreftelse.api.utils import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.ObjectMapper diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/domain/request/TilgjengeligRapporteringerRequest.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/domain/request/TilgjengeligRapporteringerRequest.kt deleted file mode 100644 index 6109b434..00000000 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/domain/request/TilgjengeligRapporteringerRequest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package no.nav.paw.rapportering.api.domain.request - -data class TilgjengeligeRapporteringerRequest( - val identitetsnummer: String? -) \ No newline at end of file diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/domain/response/TilgjengeligeRapporteringerResponse.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/domain/response/TilgjengeligeRapporteringerResponse.kt deleted file mode 100644 index e27b1181..00000000 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/domain/response/TilgjengeligeRapporteringerResponse.kt +++ /dev/null @@ -1,23 +0,0 @@ -package no.nav.paw.rapportering.api.domain.response - -import java.time.Instant -import java.util.* - -data class TilgjengeligRapportering( - val periodeId: UUID, - val rapporteringsId: UUID, - val gjelderFra: Instant, - val gjelderTil: Instant, -) - -typealias TilgjengeligRapporteringerResponse = List - -fun List.toResponse(): TilgjengeligRapporteringerResponse = this.map { - TilgjengeligRapportering( - periodeId = it.periodeId, - rapporteringsId = it.rapporteringsId, - gjelderFra = it.gjelderFra, - gjelderTil = it.gjelderTil - ) -} - diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/RapporteringHendelseProcessor.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/RapporteringHendelseProcessor.kt deleted file mode 100644 index 6be17148..00000000 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/RapporteringHendelseProcessor.kt +++ /dev/null @@ -1,61 +0,0 @@ -package no.nav.paw.rapportering.api.kafka - -import no.nav.paw.rapportering.internehendelser.PeriodeAvsluttet -import no.nav.paw.rapportering.internehendelser.RapporteringTilgjengelig -import no.nav.paw.rapportering.internehendelser.RapporteringsHendelse -import no.nav.paw.rapportering.internehendelser.RapporteringsMeldingMottatt -import org.apache.kafka.streams.kstream.KStream -import org.apache.kafka.streams.kstream.Named -import org.apache.kafka.streams.processor.api.Processor -import org.apache.kafka.streams.processor.api.ProcessorContext -import org.apache.kafka.streams.state.KeyValueStore -import org.apache.kafka.streams.processor.api.Record - -fun KStream.oppdaterRapporteringHendelseState( - rapporteringStateStoreName: String -): KStream { - val processor = { - RapporteringHendelseProcessor(rapporteringStateStoreName) - } - return process(processor, Named.`as`("rapporteringHendelseProcessor"), rapporteringStateStoreName) -} - -class RapporteringHendelseProcessor( - private val stateStoreName: String, -): Processor { - private var stateStore: KeyValueStore? = null - private var context: ProcessorContext? = null - - override fun init(context: ProcessorContext?) { - super.init(context) - this.context = context - stateStore = context?.getStateStore(stateStoreName) - } - - override fun process(record: Record?) { - val value = record?.value() ?: return - val hendelseStore = requireNotNull(stateStore) { "State store is not initialized" } - when (value) { - is RapporteringTilgjengelig -> { - hendelseStore.get(value.arbeidssoekerId)?.let { - hendelseStore.put(value.arbeidssoekerId, RapporteringTilgjengeligState(it.rapporteringer.plus(value))) - } ?: hendelseStore.put(value.arbeidssoekerId, RapporteringTilgjengeligState(listOf(value))) - } - is RapporteringsMeldingMottatt -> { - hendelseStore.get(value.arbeidssoekerId)?.let { state -> - state.rapporteringer - .filterNot { it.rapporteringsId == value.rapporteringsId } - .let { rapporteringer -> - if (rapporteringer.isEmpty()) hendelseStore.delete(value.arbeidssoekerId) - else hendelseStore.put(value.arbeidssoekerId, RapporteringTilgjengeligState(rapporteringer)) - } - } - } - is PeriodeAvsluttet -> { - hendelseStore.get(value.arbeidssoekerId)?.let { - hendelseStore.delete(value.arbeidssoekerId) - } - } - } - } -} \ No newline at end of file diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/RapporteringTilgjengeligStateSerde.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/RapporteringTilgjengeligStateSerde.kt deleted file mode 100644 index 69ebbb5b..00000000 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/RapporteringTilgjengeligStateSerde.kt +++ /dev/null @@ -1,28 +0,0 @@ -package no.nav.paw.rapportering.api.kafka - -import no.nav.paw.rapportering.api.utils.JsonUtil -import no.nav.paw.rapportering.internehendelser.RapporteringTilgjengelig -import org.apache.kafka.common.serialization.Deserializer -import org.apache.kafka.common.serialization.Serde -import org.apache.kafka.common.serialization.Serializer - -data class RapporteringTilgjengeligState( - val rapporteringer: List -) - -class RapporteringTilgjengeligStateSerde: Serde { - override fun serializer() = RapporteringTilgjengeligStateSerializer() - override fun deserializer(): Deserializer = RapporteringTilgjengeligStateDeserializer() -} - -class RapporteringTilgjengeligStateSerializer : Serializer { - override fun serialize(topic: String?, data: RapporteringTilgjengeligState?): ByteArray { - return JsonUtil.objectMapper.writeValueAsBytes(data) - } -} - -class RapporteringTilgjengeligStateDeserializer: Deserializer { - override fun deserialize(topic: String?, data: ByteArray?): RapporteringTilgjengeligState? { - return JsonUtil.objectMapper.readValue(data, RapporteringTilgjengeligState::class.java) - } -} diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/Topology.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/Topology.kt deleted file mode 100644 index a82a6efe..00000000 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/kafka/Topology.kt +++ /dev/null @@ -1,19 +0,0 @@ -package no.nav.paw.rapportering.api.kafka - -import io.micrometer.prometheusmetrics.PrometheusMeterRegistry -import no.nav.paw.rapportering.internehendelser.RapporteringsHendelseSerde -import org.apache.kafka.common.serialization.Serdes -import org.apache.kafka.streams.StreamsBuilder -import org.apache.kafka.streams.Topology -import org.apache.kafka.streams.kstream.Consumed - -fun StreamsBuilder.appTopology( - prometheusRegistry: PrometheusMeterRegistry, - rapporteringHendelseLoggTopic: String, - rapporteringStateStoreName: String, -): Topology { - stream(rapporteringHendelseLoggTopic, Consumed.with(Serdes.Long(), RapporteringsHendelseSerde())) - .oppdaterRapporteringHendelseState(rapporteringStateStoreName) - - return build() -} \ No newline at end of file diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/SwaggerRoutes.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/SwaggerRoutes.kt deleted file mode 100644 index 66b15d0a..00000000 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/rapportering/api/routes/SwaggerRoutes.kt +++ /dev/null @@ -1,8 +0,0 @@ -package no.nav.paw.rapportering.api.routes - -import io.ktor.server.plugins.swagger.swaggerUI -import io.ktor.server.routing.Route - -fun Route.swaggerRoutes() { - swaggerUI(path = "docs", swaggerFile = "openapi/rapporteringapi.yaml") -} \ No newline at end of file diff --git a/apps/bekreftelse-api/src/main/resources/local/application_config.toml b/apps/bekreftelse-api/src/main/resources/local/application_config.toml index 79be8a99..9dd62d4f 100644 --- a/apps/bekreftelse-api/src/main/resources/local/application_config.toml +++ b/apps/bekreftelse-api/src/main/resources/local/application_config.toml @@ -1,15 +1,15 @@ applicationIdSuffix = "v1" -producerId = "paw-rapportering-api-v1" -rapporteringTopic = "paw.rapportering-v1" -rapporteringHendelseLoggTopic = "paw.rapportering-hendelse-logg-v1" -rapporteringStateStoreName = "RapporteringStateStore" +producerId = "paw-bekreftelse-api" +bekreftelseTopic = "paw.bekreftelse-v1" +bekreftelseHendelseLoggTopic = "paw.bekreftelse-hendelse-logg-v1" +bekreftelseStateStoreName = "bekreftelseStateStore" hostname = "${HOSTNAME}" [[authProviders]] name = "tokenx" discoveryUrl = "http://localhost:8081/default/.well-known/openid-configuration" tokenEndpointUrl = "http://localhost:8081/default/token" -clientId = "paw-rapportering-api" +clientId = "paw-bekreftelse-api" [authProviders.claims] map = [ "acr=Level4", "acr=idporten-loa-high" ] diff --git a/apps/bekreftelse-api/src/main/resources/nais/application_config.toml b/apps/bekreftelse-api/src/main/resources/nais/application_config.toml index df4dc806..a752d3e7 100644 --- a/apps/bekreftelse-api/src/main/resources/nais/application_config.toml +++ b/apps/bekreftelse-api/src/main/resources/nais/application_config.toml @@ -1,8 +1,8 @@ applicationIdSuffix = "v1" -producerId = "paw-rapportering-api-v1" -rapporteringTopic = "paw.rapportering-v1" -rapporteringHendelseLoggTopic = "paw.rapportering-hendelse-logg-v1" -rapporteringStateStoreName = "RapporteringStateStore" +producerId = "paw-bekreftelse-api" +bekreftelseTopic = "paw.bekreftelse-v1" +bekreftelseHendelseLoggTopic = "paw.bekreftelse-hendelse-logg-v1" +bekreftelseStateStoreName = "bekreftelseStateStore" hostname = "${HOSTNAME}" [[authProviders]] diff --git a/apps/bekreftelse-api/src/main/resources/openapi/rapporteringapi.yaml b/apps/bekreftelse-api/src/main/resources/openapi/docs.yaml similarity index 100% rename from apps/bekreftelse-api/src/main/resources/openapi/rapporteringapi.yaml rename to apps/bekreftelse-api/src/main/resources/openapi/docs.yaml diff --git a/apps/hendelselogg-backup/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/backup/brukerstoette/HttpClients.kt b/apps/hendelselogg-backup/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/backup/brukerstoette/HttpClients.kt index 53120732..753097fb 100644 --- a/apps/hendelselogg-backup/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/backup/brukerstoette/HttpClients.kt +++ b/apps/hendelselogg-backup/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/backup/brukerstoette/HttpClients.kt @@ -1,16 +1,15 @@ package no.nav.paw.arbeidssoekerregisteret.backup.brukerstoette -import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.registerKotlinModule -import io.ktor.client.* -import io.ktor.client.plugins.contentnegotiation.* -import io.ktor.serialization.jackson.* +import io.ktor.client.HttpClient +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.serialization.jackson.jackson import no.nav.common.token_client.client.AzureAdMachineToMachineTokenClient +import no.nav.paw.config.env.currentNaisEnv import no.nav.paw.config.hoplite.loadNaisOrLocalConfiguration import no.nav.paw.kafkakeygenerator.auth.AzureM2MConfig import no.nav.paw.kafkakeygenerator.auth.azureAdM2MTokenClient -import no.nav.paw.kafkakeygenerator.auth.currentNaisEnv import no.nav.paw.kafkakeygenerator.client.KafkaKeysClient import no.nav.paw.kafkakeygenerator.client.createKafkaKeyGeneratorClient diff --git a/apps/hendelselogg-backup/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/backup/initKtor.kt b/apps/hendelselogg-backup/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/backup/initKtor.kt index 7670c669..431ce951 100644 --- a/apps/hendelselogg-backup/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/backup/initKtor.kt +++ b/apps/hendelselogg-backup/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/backup/initKtor.kt @@ -23,8 +23,8 @@ import no.nav.paw.arbeidssoekerregisteret.backup.api.brukerstoette.models.Feil import no.nav.paw.arbeidssoekerregisteret.backup.brukerstoette.BrukerstoetteService import no.nav.paw.arbeidssoekerregisteret.backup.health.configureHealthRoutes import no.nav.paw.arbeidssoekerregisteret.backup.health.installMetrics -import no.nav.paw.kafkakeygenerator.auth.NaisEnv -import no.nav.paw.kafkakeygenerator.auth.currentNaisEnv +import no.nav.paw.config.env.NaisEnv +import no.nav.paw.config.env.currentNaisEnv import no.nav.security.token.support.v2.IssuerConfig import no.nav.security.token.support.v2.TokenSupportConfig import no.nav.security.token.support.v2.TokenValidationContextPrincipal diff --git a/apps/utgang-formidlingsgruppe/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/app/Startup.kt b/apps/utgang-formidlingsgruppe/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/app/Startup.kt index 6eca053c..d0622894 100644 --- a/apps/utgang-formidlingsgruppe/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/app/Startup.kt +++ b/apps/utgang-formidlingsgruppe/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/app/Startup.kt @@ -7,6 +7,8 @@ import io.micrometer.prometheusmetrics.PrometheusMeterRegistry import kotlinx.coroutines.runBlocking import no.nav.paw.arbeidssokerregisteret.app.helse.Helse import no.nav.paw.arbeidssokerregisteret.app.helse.initKtor +import no.nav.paw.config.env.NaisEnv +import no.nav.paw.config.env.currentNaisEnv import no.nav.paw.config.hoplite.loadNaisOrLocalConfiguration import no.nav.paw.config.kafka.KafkaConfig import no.nav.paw.config.kafka.streams.KafkaStreamsFactory @@ -15,8 +17,6 @@ import org.apache.kafka.streams.StreamsBuilder import org.apache.kafka.streams.state.Stores import org.slf4j.LoggerFactory import no.nav.paw.config.kafka.KAFKA_STREAMS_CONFIG_WITH_SCHEME_REG -import no.nav.paw.kafkakeygenerator.auth.NaisEnv -import no.nav.paw.kafkakeygenerator.auth.currentNaisEnv import no.nav.paw.kafkakeygenerator.client.KafkaKeysResponse import no.nav.paw.kafkakeygenerator.client.createKafkaKeyGeneratorClient import org.apache.kafka.streams.KafkaStreams diff --git a/apps/utgang-formidlingsgruppe/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/app/TestScope.kt b/apps/utgang-formidlingsgruppe/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/app/TestScope.kt index f57c596f..4a337a47 100644 --- a/apps/utgang-formidlingsgruppe/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/app/TestScope.kt +++ b/apps/utgang-formidlingsgruppe/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/app/TestScope.kt @@ -11,7 +11,7 @@ import no.nav.paw.arbeidssoekerregisteret.app.vo.ArenaFormidlingsruppe import no.nav.paw.arbeidssoekerregisteret.app.vo.AvsluttetSerde import no.nav.paw.arbeidssokerregisteret.api.v1.Periode import no.nav.paw.arbeidssokerregisteret.intern.v1.Avsluttet -import no.nav.paw.kafkakeygenerator.auth.NaisEnv +import no.nav.paw.config.env.NaisEnv import no.nav.paw.kafkakeygenerator.client.KafkaKeysResponse import no.nav.paw.kafkakeygenerator.client.inMemoryKafkaKeysMock import org.apache.avro.specific.SpecificRecord diff --git a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/clients/pdl/PdlClient.kt b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/clients/pdl/PdlClient.kt index fd71f076..b99fba04 100644 --- a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/clients/pdl/PdlClient.kt +++ b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/clients/pdl/PdlClient.kt @@ -4,10 +4,10 @@ import io.ktor.client.HttpClient import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.serialization.jackson.jackson import kotlinx.coroutines.runBlocking +import no.nav.paw.config.env.currentNaisEnv import no.nav.paw.config.hoplite.loadNaisOrLocalConfiguration import no.nav.paw.kafkakeygenerator.auth.AzureM2MConfig import no.nav.paw.kafkakeygenerator.auth.azureAdM2MTokenClient -import no.nav.paw.kafkakeygenerator.auth.currentNaisEnv import no.nav.paw.pdl.PdlClient import no.nav.paw.pdl.PdlException import no.nav.paw.pdl.graphql.generated.hentforenkletstatusbolk.HentPersonBolkResult as ForenkletStatusBolkResult diff --git a/lib/kafka-key-generator-client/src/main/kotlin/no/nav/paw/kafkakeygenerator/auth/NaisEnv.kt b/lib/hoplite-config/src/main/kotlin/no/nav/paw/config/env/NaisEnv.kt similarity index 54% rename from lib/kafka-key-generator-client/src/main/kotlin/no/nav/paw/kafkakeygenerator/auth/NaisEnv.kt rename to lib/hoplite-config/src/main/kotlin/no/nav/paw/config/env/NaisEnv.kt index d64c8dba..6635cb13 100644 --- a/lib/kafka-key-generator-client/src/main/kotlin/no/nav/paw/kafkakeygenerator/auth/NaisEnv.kt +++ b/lib/hoplite-config/src/main/kotlin/no/nav/paw/config/env/NaisEnv.kt @@ -1,4 +1,4 @@ -package no.nav.paw.kafkakeygenerator.auth +package no.nav.paw.config.env enum class NaisEnv(val clusterName: String) { Local("local"), @@ -13,3 +13,7 @@ val currentNaisEnv: NaisEnv NaisEnv.ProdGCP.clusterName -> NaisEnv.ProdGCP else -> NaisEnv.Local } + +val currentAppId: String? get() = System.getenv("NAIS_APP_IMAGE") // F.eks. europe-north1-docker.pkg.dev/nais-management-233d/paw/paw-microfrontend-toggler:24.06.27.57-1 + +val currentAppName: String? get() = System.getenv("NAIS_APP_NAME") // F.eks. paw-microfrontend-toggler diff --git a/lib/kafka-key-generator-client/src/main/kotlin/no/nav/paw/kafkakeygenerator/auth/AzureAdMachineToMachineTokenClientFactory.kt b/lib/kafka-key-generator-client/src/main/kotlin/no/nav/paw/kafkakeygenerator/auth/AzureAdMachineToMachineTokenClientFactory.kt index c1c0dffc..c7277d74 100644 --- a/lib/kafka-key-generator-client/src/main/kotlin/no/nav/paw/kafkakeygenerator/auth/AzureAdMachineToMachineTokenClientFactory.kt +++ b/lib/kafka-key-generator-client/src/main/kotlin/no/nav/paw/kafkakeygenerator/auth/AzureAdMachineToMachineTokenClientFactory.kt @@ -5,6 +5,7 @@ import com.nimbusds.jose.jwk.RSAKey import no.nav.common.token_client.builder.AzureAdTokenClientBuilder import no.nav.common.token_client.cache.CaffeineTokenCache import no.nav.common.token_client.client.AzureAdMachineToMachineTokenClient +import no.nav.paw.config.env.NaisEnv import java.security.KeyPairGenerator import java.security.interfaces.RSAPrivateKey import java.security.interfaces.RSAPublicKey diff --git a/lib/kafka-key-generator-client/src/main/kotlin/no/nav/paw/kafkakeygenerator/client/Factory.kt b/lib/kafka-key-generator-client/src/main/kotlin/no/nav/paw/kafkakeygenerator/client/Factory.kt index 4b07037a..b091bd76 100644 --- a/lib/kafka-key-generator-client/src/main/kotlin/no/nav/paw/kafkakeygenerator/client/Factory.kt +++ b/lib/kafka-key-generator-client/src/main/kotlin/no/nav/paw/kafkakeygenerator/client/Factory.kt @@ -4,11 +4,10 @@ import io.ktor.client.* import io.ktor.client.plugins.contentnegotiation.* import io.ktor.serialization.jackson.* import no.nav.common.token_client.client.AzureAdMachineToMachineTokenClient +import no.nav.paw.config.env.currentNaisEnv import no.nav.paw.config.hoplite.loadNaisOrLocalConfiguration import no.nav.paw.kafkakeygenerator.auth.AzureM2MConfig import no.nav.paw.kafkakeygenerator.auth.azureAdM2MTokenClient -import no.nav.paw.kafkakeygenerator.auth.currentNaisEnv - fun createKafkaKeyGeneratorClient(m2mTokenClient: AzureAdMachineToMachineTokenClient? = null): KafkaKeysClient { val kafkaKeyConfig = loadNaisOrLocalConfiguration("kafka_key_generator_client_config.toml")