-
Notifications
You must be signed in to change notification settings - Fork 0
/
DigisosApiClientImpl.kt
149 lines (138 loc) · 6.8 KB
/
DigisosApiClientImpl.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package no.nav.sosialhjelp.innsyn.client.digisosapi
import no.nav.sosialhjelp.api.fiks.exceptions.FiksClientException
import no.nav.sosialhjelp.api.fiks.exceptions.FiksServerException
import no.nav.sosialhjelp.innsyn.client.fiks.FiksClientImpl
import no.nav.sosialhjelp.innsyn.client.fiks.VedleggMetadata
import no.nav.sosialhjelp.innsyn.config.ClientProperties
import no.nav.sosialhjelp.innsyn.domain.DigisosApiWrapper
import no.nav.sosialhjelp.innsyn.service.idporten.IdPortenService
import no.nav.sosialhjelp.innsyn.service.vedlegg.FilForOpplasting
import no.nav.sosialhjelp.innsyn.utils.IntegrationUtils.BEARER
import no.nav.sosialhjelp.innsyn.utils.IntegrationUtils.HEADER_INTEGRASJON_ID
import no.nav.sosialhjelp.innsyn.utils.IntegrationUtils.HEADER_INTEGRASJON_PASSORD
import no.nav.sosialhjelp.innsyn.utils.IntegrationUtils.forwardHeaders
import no.nav.sosialhjelp.innsyn.utils.logger
import no.nav.sosialhjelp.innsyn.utils.objectMapper
import no.nav.sosialhjelp.innsyn.utils.typeRef
import org.springframework.context.annotation.Profile
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpHeaders.AUTHORIZATION
import org.springframework.http.HttpStatus
import org.springframework.http.MediaType
import org.springframework.stereotype.Component
import org.springframework.util.LinkedMultiValueMap
import org.springframework.web.reactive.function.BodyInserters
import org.springframework.web.reactive.function.client.WebClient
import org.springframework.web.reactive.function.client.bodyToMono
import java.util.Collections
/**
* Brukes kun i dev-sbs eller ved lokal testing mot fiks-test
*/
@Profile("!(prod-sbs|mock)")
@Component
class DigisosApiClientImpl(
private val clientProperties: ClientProperties,
private val fiksWebClient: WebClient,
private val idPortenService: IdPortenService,
private val fiksClientImpl: FiksClientImpl,
) : DigisosApiClient {
private val testbrukerNatalie = System.getenv("TESTBRUKER_NATALIE") ?: "11111111111"
override fun oppdaterDigisosSak(fiksDigisosId: String?, digisosApiWrapper: DigisosApiWrapper): String? {
var id = fiksDigisosId
if (fiksDigisosId == null || fiksDigisosId == "001" || fiksDigisosId == "002" || fiksDigisosId == "003") {
id = opprettDigisosSak()
log.info("Laget ny digisossak: $id")
}
return fiksWebClient.post()
.uri("/digisos/api/v1/11415cd1-e26d-499a-8421-751457dfcbd5/$id")
.headers { it.addAll(headers()) }
.body(BodyInserters.fromValue(objectMapper.writeValueAsString(digisosApiWrapper)))
.retrieve()
.onStatus(HttpStatus::is4xxClientError) {
it.createException().map { e ->
log.warn("Fiks - oppdaterDigisosSak feilet - ${e.statusCode} ${e.statusText}", e)
FiksClientException(e.rawStatusCode, e.message, e)
}
}
.onStatus(HttpStatus::is5xxServerError) {
it.createException().map { e ->
log.warn("Fiks - oppdaterDigisosSak feilet - ${e.statusCode} ${e.statusText}", e)
FiksServerException(e.rawStatusCode, e.message, e)
}
}
.bodyToMono<String>()
.block()
.also { log.info("Postet DigisosSak til Fiks") }
}
// Brukes for å laste opp Pdf-er fra test-fagsystem i q-miljø
override fun lastOppNyeFilerTilFiks(files: List<FilForOpplasting>, soknadId: String): List<String> {
val body = LinkedMultiValueMap<String, Any>()
files.forEachIndexed { fileId, file ->
val vedleggMetadata = VedleggMetadata(file.filnavn, file.mimetype, file.storrelse)
body.add("vedleggSpesifikasjon:$fileId", fiksClientImpl.createHttpEntityOfString(fiksClientImpl.serialiser(vedleggMetadata), "vedleggSpesifikasjon:$fileId"))
body.add("dokument:$fileId", fiksClientImpl.createHttpEntityOfFile(file, "dokument:$fileId"))
}
val opplastingResponseList = fiksWebClient.post()
.uri("/digisos/api/v1/11415cd1-e26d-499a-8421-751457dfcbd5/$soknadId/filer")
.headers { it.addAll(headers()) }
.contentType(MediaType.MULTIPART_FORM_DATA)
.body(BodyInserters.fromMultipartData(body))
.retrieve()
.onStatus(HttpStatus::is4xxClientError) {
it.createException().map { e ->
log.warn("Fiks - Opplasting av filer feilet - ${e.statusCode} ${e.statusText}", e)
FiksClientException(e.rawStatusCode, e.message, e)
}
}
.onStatus(HttpStatus::is5xxServerError) {
it.createException().map { e ->
log.warn("Fiks - Opplasting av filer feilet - ${e.statusCode} ${e.statusText}", e)
FiksServerException(e.rawStatusCode, e.message, e)
}
}
.bodyToMono(typeRef<List<FilOpplastingResponse>>())
.block()
log.info("Filer sendt til Fiks")
return opplastingResponseList!!.map { it.dokumentlagerDokumentId }
}
fun opprettDigisosSak(): String? {
val response = fiksWebClient.post()
.uri("/digisos/api/v1/11415cd1-e26d-499a-8421-751457dfcbd5/ny?sokerFnr=$testbrukerNatalie")
.headers { it.addAll(headers()) }
.body(BodyInserters.fromValue(""))
.retrieve()
.onStatus(HttpStatus::is4xxClientError) {
it.createException().map { e ->
log.warn("Fiks - opprettDigisosSak feilet - ${e.statusCode} ${e.statusText}", e)
FiksClientException(e.rawStatusCode, e.message, e)
}
}
.onStatus(HttpStatus::is5xxServerError) {
it.createException().map { e ->
log.warn("Fiks - opprettDigisosSak feilet - ${e.statusCode} ${e.statusText}", e)
FiksServerException(e.rawStatusCode, e.message, e)
}
}
.bodyToMono<String>()
.block()
log.info("Opprettet sak hos Fiks. Digisosid: $response")
return response?.replace("\"", "")
}
private fun headers(): HttpHeaders {
val headers = forwardHeaders()
headers.accept = Collections.singletonList(MediaType.APPLICATION_JSON)
headers.set(HEADER_INTEGRASJON_ID, clientProperties.fiksIntegrasjonIdKommune)
headers.set(HEADER_INTEGRASJON_PASSORD, clientProperties.fiksIntegrasjonPassordKommune)
headers.set(AUTHORIZATION, BEARER + idPortenService.getToken().token)
headers.contentType = MediaType.APPLICATION_JSON
return headers
}
companion object {
private val log by logger()
}
}
data class FilOpplastingResponse(
val filnavn: String,
val dokumentlagerDokumentId: String,
val storrelse: Long,
)