Skip to content

Commit bb21e23

Browse files
authored
Bugfix/nom trivia (#3959)
1 parent aa95e18 commit bb21e23

File tree

8 files changed

+63
-10
lines changed

8 files changed

+63
-10
lines changed

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/medl/command/MedlPutCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public Mono<MedlPostResponse> call() {
3737
.retrieve()
3838
.toBodilessEntity()
3939
.map(response -> MedlPostResponse.builder()
40-
.status(HttpStatus.valueOf(response.getStatusCode().value()))
40+
.status(HttpStatus.resolve(response.getStatusCode().value()))
4141
.build())
4242
.doOnError(WebClientError.logTo(log))
4343
.onErrorResume(throwable -> MedlPostResponse.of(WebClientError.describe(throwable)));

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/nom/NomClient.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import no.nav.dolly.bestilling.nom.domain.NomRessursRequest;
88
import no.nav.dolly.bestilling.nom.domain.NomRessursResponse;
99
import no.nav.dolly.bestilling.personservice.PersonServiceConsumer;
10+
import no.nav.dolly.config.ApplicationConfig;
1011
import no.nav.dolly.domain.PdlPerson;
1112
import no.nav.dolly.domain.PdlPersonBolk;
1213
import no.nav.dolly.domain.jpa.BestillingProgress;
@@ -15,11 +16,13 @@
1516
import no.nav.dolly.domain.resultset.dolly.DollyPerson;
1617
import no.nav.dolly.mapper.MappingContextUtils;
1718
import no.nav.dolly.service.TransactionHelperService;
19+
import no.nav.testnav.libs.reactivecore.web.WebClientError;
1820
import org.springframework.http.HttpStatus;
1921
import org.springframework.stereotype.Service;
2022
import reactor.core.publisher.Flux;
2123
import reactor.core.publisher.Mono;
2224

25+
import java.time.Duration;
2326
import java.time.LocalDate;
2427
import java.util.List;
2528

@@ -35,6 +38,7 @@
3538
@RequiredArgsConstructor
3639
public class NomClient implements ClientRegister {
3740

41+
private final ApplicationConfig applicationConfig;
3842
private final NomConsumer nomConsumer;
3943
private final PersonServiceConsumer personServiceConsumer;
4044
private final MapperFacade mapperFacade;
@@ -63,6 +67,10 @@ public Mono<BestillingProgress> gjenopprett(RsDollyUtvidetBestilling bestilling,
6367
return Mono.just(ressurs);
6468
}
6569
})
70+
.timeout(Duration.ofSeconds(applicationConfig.getClientTimeout()))
71+
.onErrorResume(error -> Mono.just(NomRessursResponse.builder()
72+
.melding(WebClientError.describe(error).getMessage())
73+
.build()))
6674
.map(NomClient::getStatus)
6775
.flatMap(status -> oppdaterStatus(progress, status));
6876
}
@@ -98,7 +106,7 @@ public void release(List<String> identer) {
98106

99107
private static String getStatus(NomRessursResponse response) {
100108

101-
return isNotBlank(response.getMelding()) ? response.getMelding() : "OK";
109+
return isNotBlank(response.getMelding()) ? "FEIL= " + response.getMelding() : "OK";
102110
}
103111

104112
private Mono<BestillingProgress> oppdaterStatus(BestillingProgress progress, String status) {

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/nom/NomConsumer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package no.nav.dolly.bestilling.nom;
22

3+
import lombok.extern.slf4j.Slf4j;
34
import no.nav.dolly.bestilling.nom.command.NomAvsluttRessurs;
45
import no.nav.dolly.bestilling.nom.command.NomHentRessurs;
56
import no.nav.dolly.bestilling.nom.command.NomOpprettRessurs;
@@ -14,6 +15,7 @@
1415

1516
import java.time.LocalDate;
1617

18+
@Slf4j
1719
@Service
1820
public class NomConsumer {
1921

@@ -43,7 +45,8 @@ public Mono<NomRessursResponse> hentRessurs(String ident) {
4345
public Mono<NomRessursResponse> opprettRessurs(NomRessursRequest nomRessursRequest) {
4446

4547
return tokenService.exchange(serverProperties)
46-
.flatMap(token -> new NomOpprettRessurs(webClient, nomRessursRequest, token.getTokenValue()).call());
48+
.flatMap(token -> new NomOpprettRessurs(webClient, nomRessursRequest, token.getTokenValue()).call())
49+
.doOnNext(ressursResponse -> log.info("Opprettet ressurs i NOM med respons {}", ressursResponse));
4750
}
4851

4952
public Mono<NomRessursResponse> avsluttRessurs(String ident, LocalDate sluttdato) {

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/nom/command/NomAvsluttRessurs.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class NomAvsluttRessurs implements Callable<Mono<NomRessursResponse>> {
2626

2727
@Override
2828
public Mono<NomRessursResponse> call() {
29+
2930
return webClient
3031
.post()
3132
.uri(uriBuilder -> uriBuilder
@@ -45,4 +46,4 @@ public Mono<NomRessursResponse> call() {
4546
.onErrorResume(throwable ->
4647
Mono.just(NomRessursResponse.of(WebClientError.describe(throwable))));
4748
}
48-
}
49+
}

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/nom/command/NomOpprettRessurs.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import no.nav.dolly.bestilling.nom.domain.NomRessursResponse;
77
import no.nav.testnav.libs.reactivecore.web.WebClientError;
88
import no.nav.testnav.libs.reactivecore.web.WebClientHeader;
9+
import org.springframework.http.HttpStatus;
910
import org.springframework.http.MediaType;
1011
import org.springframework.web.reactive.function.client.WebClient;
1112
import reactor.core.publisher.Mono;
@@ -25,6 +26,8 @@ public class NomOpprettRessurs implements Callable<Mono<NomRessursResponse>> {
2526
@Override
2627
public Mono<NomRessursResponse> call() {
2728

29+
log.info("Sender opprett ressurs til NOM for ident {}", request.getPersonident());
30+
2831
return webClient
2932
.post()
3033
.uri(uriBuilder -> uriBuilder
@@ -34,7 +37,11 @@ public Mono<NomRessursResponse> call() {
3437
.headers(WebClientHeader.bearer(token))
3538
.bodyValue(request)
3639
.retrieve()
37-
.bodyToMono(NomRessursResponse.class)
40+
.toBodilessEntity()
41+
.map(response -> NomRessursResponse
42+
.builder()
43+
.status(HttpStatus.resolve(response.getStatusCode().value()))
44+
.build())
3845
.doOnError(WebClientError.logTo(log))
3946
.onErrorResume(throwable ->
4047
Mono.just(NomRessursResponse.of(WebClientError.describe(throwable))));

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/nom/domain/NomRessursResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ public static class Navn {
3838
}
3939

4040
public static NomRessursResponse of(WebClientError.Description description) {
41-
return NomRessursResponse
42-
.builder()
41+
42+
return NomRessursResponse.builder()
4343
.status(description.getStatus())
4444
.melding(description.getMessage())
4545
.build();

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/nom/mapper/NomRessursMappingStrategy.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import org.springframework.stereotype.Component;
1111

1212
import static java.util.Objects.nonNull;
13+
import static no.nav.dolly.util.TitleCaseUtil.toTitleCase;
14+
import static org.apache.commons.lang3.StringUtils.isNotBlank;
1315

1416
@Component
1517
public class NomRessursMappingStrategy implements MappingStrategy {
@@ -26,9 +28,9 @@ public void mapAtoB(RsNomData nomdata, NomRessursRequest nomRessursRequest, Mapp
2628

2729
var navn = (PdlPerson.Navn) context.getProperty("navn");
2830
if (nonNull(navn)) {
29-
nomRessursRequest.setFornavn(navn.getFornavn());
30-
nomRessursRequest.setMellomnavn(navn.getMellomnavn());
31-
nomRessursRequest.setEtternavn(navn.getEtternavn());
31+
nomRessursRequest.setFornavn(isNotBlank(navn.getFornavn()) ? toTitleCase(navn.getFornavn()) : null);
32+
nomRessursRequest.setMellomnavn(isNotBlank(navn.getMellomnavn()) ? toTitleCase(navn.getMellomnavn()) : null);
33+
nomRessursRequest.setEtternavn(isNotBlank(navn.getEtternavn()) ? toTitleCase(navn.getEtternavn()) : null);
3234
}
3335
}
3436
})
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package no.nav.dolly.util;
2+
3+
import lombok.experimental.UtilityClass;
4+
5+
import static org.apache.commons.lang3.StringUtils.isBlank;
6+
7+
@UtilityClass
8+
public class TitleCaseUtil {
9+
10+
public static String toTitleCase(String input) {
11+
12+
if (isBlank(input)) {
13+
return input;
14+
}
15+
16+
var titleCaseBuilder = new StringBuilder();
17+
var capitalizeNext = true; // Flag to indicate if the next character should be capitalized
18+
19+
for (char ch : input.toCharArray()) {
20+
if (Character.isWhitespace(ch)) {
21+
titleCaseBuilder.append(ch);
22+
capitalizeNext = true; // Capitalize the first letter of the next word
23+
} else if (capitalizeNext) {
24+
titleCaseBuilder.append(Character.toUpperCase(ch));
25+
capitalizeNext = false;
26+
} else {
27+
titleCaseBuilder.append(Character.toLowerCase(ch));
28+
}
29+
}
30+
return titleCaseBuilder.toString();
31+
}
32+
}

0 commit comments

Comments
 (0)