-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
IS-2595: Bulk manglende medvirkning (#426)
- Loading branch information
1 parent
dc2c877
commit dc48aea
Showing
22 changed files
with
302 additions
and
0 deletions.
There are no files selected for viewing
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
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
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
12 changes: 12 additions & 0 deletions
12
.../no/nav/syfo/personstatus/application/manglendemedvirkning/IManglendeMedvirkningClient.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,12 @@ | ||
package no.nav.syfo.personstatus.application.manglendemedvirkning | ||
|
||
import no.nav.syfo.personstatus.domain.PersonIdent | ||
|
||
interface IManglendeMedvirkningClient { | ||
|
||
suspend fun getLatestVurderinger( | ||
callId: String, | ||
token: String, | ||
personidenter: List<PersonIdent>, | ||
): ManglendeMedvirkningResponseDTO? | ||
} |
32 changes: 32 additions & 0 deletions
32
...tlin/no/nav/syfo/personstatus/application/manglendemedvirkning/ManglendeMedvirkningDTO.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,32 @@ | ||
package no.nav.syfo.personstatus.application.manglendemedvirkning | ||
|
||
import java.time.LocalDate | ||
import java.time.LocalDateTime | ||
import java.util.* | ||
|
||
data class ManglendeMedvirkningRequestDTO( | ||
val personidenter: List<String> | ||
) | ||
|
||
data class ManglendeMedvirkningResponseDTO( | ||
val vurderinger: Map<String, ManglendeMedvirkningDTO> | ||
) | ||
|
||
data class ManglendeMedvirkningDTO( | ||
val uuid: UUID, | ||
val personident: String, | ||
val createdAt: LocalDateTime, | ||
val type: ManglendeMedvirkningVurderingType, | ||
val begrunnelse: String, | ||
val varsel: ManglendeMedvirkningVarselDTO?, | ||
) | ||
|
||
data class ManglendeMedvirkningVarselDTO( | ||
val uuid: UUID, | ||
val createdAt: LocalDateTime, | ||
val svarfrist: LocalDate, | ||
) | ||
|
||
enum class ManglendeMedvirkningVurderingType { | ||
FORHANDSVARSEL, OPPFYLT, STANS, IKKE_AKTUELL, | ||
} |
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
105 changes: 105 additions & 0 deletions
105
...fo/personstatus/infrastructure/clients/manglendemedvirkning/ManglendeMedvirkningClient.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,105 @@ | ||
package no.nav.syfo.personstatus.infrastructure.clients.arbeidsuforhet | ||
|
||
import io.ktor.client.* | ||
import io.ktor.client.call.* | ||
import io.ktor.client.plugins.* | ||
import io.ktor.client.request.* | ||
import io.ktor.client.statement.* | ||
import io.ktor.http.* | ||
import io.micrometer.core.instrument.Counter | ||
import net.logstash.logback.argument.StructuredArguments | ||
import no.nav.syfo.personstatus.infrastructure.clients.ClientEnvironment | ||
import no.nav.syfo.personstatus.infrastructure.clients.azuread.AzureAdClient | ||
import no.nav.syfo.personstatus.infrastructure.clients.httpClientDefault | ||
import no.nav.syfo.personstatus.domain.PersonIdent | ||
import no.nav.syfo.personstatus.infrastructure.METRICS_NS | ||
import no.nav.syfo.personstatus.infrastructure.METRICS_REGISTRY | ||
import no.nav.syfo.personstatus.application.manglendemedvirkning.IManglendeMedvirkningClient | ||
import no.nav.syfo.personstatus.application.manglendemedvirkning.ManglendeMedvirkningRequestDTO | ||
import no.nav.syfo.personstatus.application.manglendemedvirkning.ManglendeMedvirkningResponseDTO | ||
import no.nav.syfo.util.NAV_CALL_ID_HEADER | ||
import no.nav.syfo.util.bearerHeader | ||
import no.nav.syfo.util.callIdArgument | ||
import org.slf4j.LoggerFactory | ||
|
||
class ManglendeMedvirkningClient( | ||
private val azureAdClient: AzureAdClient, | ||
private val clientEnvironment: ClientEnvironment, | ||
private val httpClient: HttpClient = httpClientDefault(), | ||
) : IManglendeMedvirkningClient { | ||
|
||
private val manglendeMedvirkningUrl = "${clientEnvironment.baseUrl}$MANGLENDE_MEDVIRKNING_API_PATH" | ||
|
||
override suspend fun getLatestVurderinger( | ||
callId: String, | ||
token: String, | ||
personidenter: List<PersonIdent>, | ||
): ManglendeMedvirkningResponseDTO? { | ||
val oboToken = azureAdClient.getOnBehalfOfToken( | ||
scopeClientId = clientEnvironment.clientId, | ||
token, | ||
)?.accessToken ?: throw RuntimeException("Failed to get OBO-token for manglende medvirkning vurdering") | ||
val requestDTO = ManglendeMedvirkningRequestDTO(personidenter.map { it.value }) | ||
return try { | ||
val response = httpClient.post(manglendeMedvirkningUrl) { | ||
header(HttpHeaders.Authorization, bearerHeader(oboToken)) | ||
header(NAV_CALL_ID_HEADER, callId) | ||
accept(ContentType.Application.Json) | ||
contentType(ContentType.Application.Json) | ||
setBody(requestDTO) | ||
} | ||
when (response.status) { | ||
HttpStatusCode.OK -> { | ||
COUNT_CALL_MANGLENDE_MEDVIRKNING_SUCCESS.increment() | ||
response.body<ManglendeMedvirkningResponseDTO>() | ||
} | ||
HttpStatusCode.NotFound -> { | ||
log.error("Resource not found") | ||
COUNT_CALL_MANGLENDE_MEDVIRKNING_FAIL.increment() | ||
null | ||
} | ||
else -> { | ||
log.error("Unhandled status code: ${response.status}") | ||
COUNT_CALL_MANGLENDE_MEDVIRKNING_FAIL.increment() | ||
null | ||
} | ||
} | ||
} catch (e: ClientRequestException) { | ||
handleUnexpectedResponseException(e.response, callId) | ||
throw e | ||
} catch (e: ServerResponseException) { | ||
handleUnexpectedResponseException(e.response, callId) | ||
throw e | ||
} | ||
} | ||
|
||
private fun handleUnexpectedResponseException( | ||
response: HttpResponse, | ||
callId: String, | ||
) { | ||
log.error( | ||
"Error while requesting from ismanglendemedvirkning with {}, {}", | ||
StructuredArguments.keyValue("statusCode", response.status.value.toString()), | ||
callIdArgument(callId) | ||
) | ||
COUNT_CALL_MANGLENDE_MEDVIRKNING_FAIL.increment() | ||
} | ||
|
||
companion object { | ||
const val MANGLENDE_MEDVIRKNING_API_PATH = "/api/internad/v1/manglende-medvirkning/get-vurderinger" | ||
private val log = LoggerFactory.getLogger(ManglendeMedvirkningClient::class.java) | ||
|
||
const val CALL_MANGLENDE_MEDVIRKNING_BASE = "${METRICS_NS}_call_ismanglendemedvirkning" | ||
const val CALL_MANGLENDE_MEDVIRKNING_SUCCESS = "${CALL_MANGLENDE_MEDVIRKNING_BASE}_success_count" | ||
const val CALL_MANGLENDE_MEDVIRKNING_FAIL = "${CALL_MANGLENDE_MEDVIRKNING_BASE}_fail_count" | ||
|
||
val COUNT_CALL_MANGLENDE_MEDVIRKNING_SUCCESS: Counter = Counter | ||
.builder(CALL_MANGLENDE_MEDVIRKNING_SUCCESS) | ||
.description("Counts the number of successful calls to ismanglendemedvirkning") | ||
.register(METRICS_REGISTRY) | ||
val COUNT_CALL_MANGLENDE_MEDVIRKNING_FAIL: Counter = Counter | ||
.builder(CALL_MANGLENDE_MEDVIRKNING_FAIL) | ||
.description("Counts the number of failed calls to ismanglendemedvirkning") | ||
.register(METRICS_REGISTRY) | ||
} | ||
} |
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
Oops, something went wrong.