diff --git a/apps/levende-arbeidsforhold-ansettelse/build.gradle b/apps/levende-arbeidsforhold-ansettelse/build.gradle index 90dcde18837..0cacdce2eb4 100644 --- a/apps/levende-arbeidsforhold-ansettelse/build.gradle +++ b/apps/levende-arbeidsforhold-ansettelse/build.gradle @@ -2,57 +2,48 @@ plugins { id "dolly-apps" } -test { - useJUnitPlatform() -} - sonarqube { properties { - property "sonar.dynamicAnalysis", "reuseReports" - property "sonar.host.url", "https://sonarcloud.io" - property "sonar.java.coveragePlugin", "jacoco" - property "sonar.language", "java" - property "sonar.token", System.getenv("SONAR_TOKEN") - property "sonar.organization", "navikt" - property "sonar.project.monorepo.enabled", true property "sonar.projectKey", "testnav-levende-arbeidsforhold-ansettelse" property "sonar.projectName", "testnav-levende-arbeidsforhold-ansettelse" - property "sonar.sourceEncoding", "UTF-8" } } - dependencies { implementation "no.nav.testnav.libs:data-transfer-objects" implementation "no.nav.testnav.libs:data-transfer-search-objects" implementation "no.nav.testnav.libs:database" implementation "no.nav.testnav.libs:reactive-core" implementation "no.nav.testnav.libs:security-core" - implementation "no.nav.testnav.libs:servlet-core" + implementation "no.nav.testnav.libs:reactive-security" implementation "no.nav.testnav.libs:servlet-insecure-security" implementation "no.nav.testnav.libs:vault" implementation "org.springframework.boot:spring-boot-starter-oauth2-client" - implementation "org.springframework.boot:spring-boot-starter-data-jpa" + implementation "org.springframework.boot:spring-boot-starter-data-r2dbc" implementation "org.springframework.cloud:spring-cloud-starter-vault-config" - implementation "org.postgresql:postgresql:42.7.3" + implementation "io.r2dbc:r2dbc-h2" + implementation "org.postgresql:r2dbc-postgresql" + implementation "org.flywaydb:flyway-core" + implementation "org.flywaydb:flyway-database-postgresql" + + runtimeOnly "org.postgresql:postgresql" + runtimeOnly "com.h2database:h2" implementation "io.micrometer:micrometer-registry-prometheus" - implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0" - implementation "io.swagger.core.v3:swagger-annotations-jakarta:2.2.21" + implementation "org.springdoc:springdoc-openapi-starter-webflux-ui:$versions.springdoc" + implementation "io.swagger.core.v3:swagger-annotations-jakarta:$versions.swagger" implementation "org.hibernate.validator:hibernate-validator" testImplementation "org.springframework.boot:spring-boot-starter-test" - testImplementation "org.springframework.cloud:spring-cloud-contract-wiremock" implementation "org.projectlombok:lombok" annotationProcessor "org.projectlombok:lombok" testAnnotationProcessor "org.projectlombok:lombok" implementation "com.zaxxer:HikariCP" - implementation "com.h2database:h2" } diff --git a/apps/levende-arbeidsforhold-ansettelse/settings.gradle b/apps/levende-arbeidsforhold-ansettelse/settings.gradle index 7c8a740fb8c..fcc1ddbc0b7 100644 --- a/apps/levende-arbeidsforhold-ansettelse/settings.gradle +++ b/apps/levende-arbeidsforhold-ansettelse/settings.gradle @@ -4,9 +4,9 @@ plugins { rootProject.name = 'levende-arbeidsforhold-ansettelse' -includeBuild '../../libs/security-core' -includeBuild '../../libs/servlet-core' +includeBuild '../../libs/reactive-security' includeBuild '../../libs/reactive-core' +includeBuild '../../libs/security-core' includeBuild '../../libs/servlet-insecure-security' includeBuild '../../libs/data-transfer-objects' includeBuild '../../libs/data-transfer-search-objects' diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/ApplicationConfig.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/ApplicationConfig.java index cdfc25cd18a..9306118ff02 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/ApplicationConfig.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/ApplicationConfig.java @@ -1,6 +1,7 @@ package no.nav.testnav.levendearbeidsforholdansettelse.config; -import no.nav.testnav.libs.servletcore.config.ApplicationCoreConfig; +import no.nav.testnav.libs.reactivecore.config.CoreConfig; +import no.nav.testnav.libs.reactivesecurity.config.SecureOAuth2ServerToServerConfiguration; import no.nav.testnav.libs.standalone.servletsecurity.config.InsecureJwtServerToServerConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @@ -8,7 +9,8 @@ @Configuration @Import({ - ApplicationCoreConfig.class, + CoreConfig.class, + SecureOAuth2ServerToServerConfiguration.class, InsecureJwtServerToServerConfiguration.class }) @EnableAsync diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/DatabaseR2dbcConfiguration.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/DatabaseR2dbcConfiguration.java new file mode 100644 index 00000000000..3cd1607a93b --- /dev/null +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/DatabaseR2dbcConfiguration.java @@ -0,0 +1,39 @@ +package no.nav.testnav.levendearbeidsforholdansettelse.config; + +import io.r2dbc.h2.H2ConnectionFactory; +import io.r2dbc.spi.ConnectionFactory; +import lombok.RequiredArgsConstructor; +import org.flywaydb.core.Flyway; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.core.env.Environment; +import org.springframework.data.r2dbc.config.AbstractR2dbcConfiguration; +import org.springframework.data.r2dbc.config.EnableR2dbcAuditing; +import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories; + +@Configuration +@EnableR2dbcAuditing +@EnableR2dbcRepositories +@RequiredArgsConstructor +class DatabaseR2dbcConfiguration extends AbstractR2dbcConfiguration { + + private final Environment env; + + @Bean + @Profile("dev") + public ConnectionFactory connectionFactory() { + return H2ConnectionFactory.inMemory("testdb"); + } + + @Bean(initMethod = "migrate") + public Flyway flyway() { + return new Flyway(Flyway.configure() + .baselineOnMigrate(true) + .dataSource( + env.getRequiredProperty("spring.datasource.url"), + env.getRequiredProperty("spring.datasource.username"), + env.getRequiredProperty("spring.datasource.password")) + ); + } +} \ No newline at end of file diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/OpenApiConfig.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/OpenApiConfig.java index 366834bcc32..863b0003ff2 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/OpenApiConfig.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/OpenApiConfig.java @@ -7,16 +7,19 @@ import io.swagger.v3.oas.models.info.License; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; -import no.nav.testnav.libs.servletcore.config.ApplicationProperties; +import no.nav.testnav.libs.reactivecore.config.ApplicationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.http.HttpHeaders; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.server.WebFilter; +import org.springframework.web.server.WebFilterChain; +import reactor.core.publisher.Mono; import java.util.Arrays; @Configuration -public class OpenApiConfig implements WebMvcConfigurer { +public class OpenApiConfig implements WebFilter { @Bean public OpenAPI openApi(ApplicationProperties applicationProperties) { @@ -26,7 +29,7 @@ public OpenAPI openApi(ApplicationProperties applicationProperties) { .scheme("bearer") .bearerFormat("JWT") .in(SecurityScheme.In.HEADER) - .name("Authorization") + .name(HttpHeaders.AUTHORIZATION) )) .addSecurityItem( new SecurityRequirement().addList("bearer-jwt", Arrays.asList("read", "write"))) @@ -48,7 +51,15 @@ public OpenAPI openApi(ApplicationProperties applicationProperties) { } @Override - public void addViewControllers(ViewControllerRegistry registry) { - registry.addViewController("/swagger").setViewName("redirect:/swagger-ui.html"); + public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { + if (exchange.getRequest().getURI().getPath().equals("/swagger")) { + return chain + .filter(exchange.mutate() + .request(exchange.getRequest() + .mutate().path("/swagger-ui.html").build()) + .build()); + } + + return chain.filter(exchange); } } \ No newline at end of file diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/SecurityConfig.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/SecurityConfig.java index 0f287cc8b54..9cbb0b2b1ba 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/SecurityConfig.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/config/SecurityConfig.java @@ -1,26 +1,28 @@ package no.nav.testnav.levendearbeidsforholdansettelse.config; +import lombok.RequiredArgsConstructor; +import no.nav.testnav.libs.reactivesecurity.manager.JwtReactiveAuthenticationManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.Customizer; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; -import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.config.annotation.method.configuration.EnableReactiveMethodSecurity; +import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity; +import org.springframework.security.config.web.server.ServerHttpSecurity; +import org.springframework.security.web.server.SecurityWebFilterChain; -@EnableWebSecurity @Configuration +@EnableWebFluxSecurity +@EnableReactiveMethodSecurity +@RequiredArgsConstructor public class SecurityConfig { + private final JwtReactiveAuthenticationManager jwtReactiveAuthenticationManager; + @Bean @SuppressWarnings("java:S4502") - public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { - - httpSecurity.sessionManagement(sessionConfig -> sessionConfig.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) - .csrf(AbstractHttpConfigurer::disable) - .authorizeHttpRequests(authorizeConfig -> authorizeConfig.requestMatchers( + public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity httpSecurity) { + return httpSecurity + .csrf(ServerHttpSecurity.CsrfSpec::disable) + .authorizeExchange(authorizeConfig -> authorizeConfig.pathMatchers( "/internal/**", "/webjars/**", "/swagger-resources/**", @@ -31,13 +33,8 @@ public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Excepti "/swagger-ui.html", "/h2/**", "/member/**") - .permitAll() - .requestMatchers("/api/**") - .fullyAuthenticated()) - .headers(headers -> headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable)) - .oauth2ResourceServer(oauth2RSConfig -> oauth2RSConfig.jwt(Customizer.withDefaults())); - - return httpSecurity.build(); + .permitAll().anyExchange().authenticated()) + .oauth2ResourceServer(oauth2RSConfig -> oauth2RSConfig.jwt(jwtSpec -> jwtSpec.authenticationManager(jwtReactiveAuthenticationManager))) + .build(); } -} - +} \ No newline at end of file diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/consumers/AaregConsumer.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/consumers/AaregConsumer.java index 1a910ec052e..d10978ac884 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/consumers/AaregConsumer.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/consumers/AaregConsumer.java @@ -1,7 +1,5 @@ package no.nav.testnav.levendearbeidsforholdansettelse.consumers; -import io.netty.channel.ChannelOption; -import io.netty.channel.epoll.EpollChannelOption; import lombok.extern.slf4j.Slf4j; import no.nav.testnav.levendearbeidsforholdansettelse.config.Consumers; import no.nav.testnav.levendearbeidsforholdansettelse.consumers.command.aareg.HentArbeidsforholdCommand; diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/consumers/KodeverkServiceConsumer.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/consumers/KodeverkServiceConsumer.java index 263800d4851..6bfb34c37fb 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/consumers/KodeverkServiceConsumer.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/consumers/KodeverkServiceConsumer.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.ExchangeStrategies; import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; import java.util.ArrayList; import java.util.List; @@ -39,12 +40,11 @@ public KodeverkServiceConsumer( objectMapper = new ObjectMapper(); } - public List hentKodeverk(String kodeverk) { + public Mono> hentKodeverk(String kodeverk) { return tokenExchange.exchange(serverProperties) .flatMap(token -> new KodeverkServiceCommand(webClient, token.getTokenValue(), kodeverk, objectMapper).call()) .map(Map::keySet) - .map(ArrayList::new) - .block(); + .map(ArrayList::new); } } \ No newline at end of file diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/consumers/command/aareg/HentArbeidsforholdCommand.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/consumers/command/aareg/HentArbeidsforholdCommand.java index 1d5fb53956a..7ab9b5920f1 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/consumers/command/aareg/HentArbeidsforholdCommand.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/consumers/command/aareg/HentArbeidsforholdCommand.java @@ -2,9 +2,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import no.nav.testnav.levendearbeidsforholdansettelse.domain.NavHeaders; import no.nav.testnav.libs.dto.levendearbeidsforhold.v1.Arbeidsforhold; import no.nav.testnav.libs.reactivecore.utils.WebClientFilter; -import no.nav.testnav.libs.servletcore.headers.NavHeaders; import org.springframework.http.HttpHeaders; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClientResponseException; @@ -23,7 +23,7 @@ @RequiredArgsConstructor public class HentArbeidsforholdCommand implements Callable> { - private static final String miljoe = "q2"; + private static final String MILJOE = "q2"; private static final String NAV_PERSON_IDENT = "Nav-Personident"; private static final String CONSUMER = "Dolly"; @@ -45,7 +45,7 @@ public Flux call() { .queryParam("arbeidsforholdtype", "forenkletOppgjoersordning", "frilanserOppdragstakerHonorarPersonerMm", "maritimtArbeidsforhold", "ordinaertArbeidsforhold") - .build(miljoe)) + .build(MILJOE)) .header(HttpHeaders.AUTHORIZATION, "Bearer " + token) .header(NAV_PERSON_IDENT, ident) .header(NavHeaders.NAV_CONSUMER_ID, CONSUMER) diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/controller/LoggController.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/controller/LoggController.java index 3e369388a0d..d00b0c403aa 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/controller/LoggController.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/controller/LoggController.java @@ -10,8 +10,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; - -import java.util.List; +import reactor.core.publisher.Flux; @RestController @RequestMapping("/api/v1/logg") @@ -22,21 +21,21 @@ public class LoggController { @GetMapping @Operation(description = "Henter logger i hht forespørsel") - public Page getAnsettelser(Pageable pageable) { + public Flux> getAnsettelser(Pageable pageable) { return loggService.getAnsettelseLogg(pageable); } @GetMapping("/ident/{ident}") @Operation(description = "Henter logg i hht forespørsel") - public List getIdent(@PathVariable String ident) { + public Flux getIdent(@PathVariable String ident) { return loggService.getIdent(ident); } @GetMapping("/organisasjon/{orgnummer}") @Operation(description = "Henter logg i hht forespørsel") - public List getOrganisasjon(@PathVariable String orgnummer) { + public Flux getOrganisasjon(@PathVariable String orgnummer) { return loggService.getOrgnummer(orgnummer); } diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/controller/ParameterController.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/controller/ParameterController.java index 1e0692cc0ab..eb92a65f120 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/controller/ParameterController.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/controller/ParameterController.java @@ -5,8 +5,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import no.nav.testnav.levendearbeidsforholdansettelse.domain.dto.ParameterDTO; +import no.nav.testnav.levendearbeidsforholdansettelse.entity.JobbParameter; import no.nav.testnav.levendearbeidsforholdansettelse.service.ParameterService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -15,8 +15,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; - -import java.util.List; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; @Slf4j @RestController @@ -24,7 +24,6 @@ @RequiredArgsConstructor public class ParameterController { - @Autowired private final ParameterService parameterService; /** @@ -33,7 +32,7 @@ public class ParameterController { */ @GetMapping @Operation(description = "Henter alle parametre for oppretting av arbeidsforhold") - public List hentAlleParametere() { + public Flux hentAlleParametere() { return parameterService.hentAlleParametere(); } @@ -46,8 +45,8 @@ public List hentAlleParametere() { @PutMapping("/{parameternavn}") @Operation(description = "Legg inn ny verdi på en parameter") @ResponseStatus(HttpStatus.OK) - public void oppdatereVerdier(@PathVariable("parameternavn") String parameternavn, @RequestBody String verdi){ + public Mono oppdatereVerdier(@PathVariable("parameternavn") String parameternavn, @RequestBody String verdi){ - parameterService.updateVerdi(parameternavn, verdi); + return parameterService.updateVerdi(parameternavn, verdi); } } diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/domain/NavHeaders.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/domain/NavHeaders.java new file mode 100644 index 00000000000..f58ac8da888 --- /dev/null +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/domain/NavHeaders.java @@ -0,0 +1,9 @@ +package no.nav.testnav.levendearbeidsforholdansettelse.domain; + +public class NavHeaders { + private NavHeaders() { + } + + public static final String NAV_CALL_ID = "Nav-Call-Id"; + public static final String NAV_CONSUMER_ID = "Nav-Consumer-Id"; +} \ No newline at end of file diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/entity/AnsettelseLogg.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/entity/AnsettelseLogg.java index a7bb270114e..57a2fc39696 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/entity/AnsettelseLogg.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/entity/AnsettelseLogg.java @@ -1,24 +1,19 @@ package no.nav.testnav.levendearbeidsforholdansettelse.entity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.SequenceGenerator; -import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; -import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.Transient; +import org.springframework.data.domain.Persistable; +import org.springframework.data.relational.core.mapping.Column; +import org.springframework.data.relational.core.mapping.Table; -import java.math.BigDecimal; import java.time.LocalDate; import java.time.OffsetDateTime; @@ -26,38 +21,38 @@ @Builder @NoArgsConstructor @AllArgsConstructor -@Entity @Table(name = "ansettelse_logg") -public class AnsettelseLogg { +public class AnsettelseLogg implements Persistable { + + @Transient + private boolean isNew; + @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq") - @SequenceGenerator(name = "seq", sequenceName = "ansettelse_logg_id_seq", allocationSize = 1) - @Column(name = "id", nullable = false) private Integer id; @Size(max = 255) @NotNull - @Column(name = "organisasjonsnummer", nullable = false) + @Column("organisasjonsnummer") private String organisasjonsnummer; @Size(max = 255) @NotNull - @Column(name = "folkeregisterident", nullable = false) + @Column("folkeregisterident") private String folkeregisterident; @NotNull - @Column(name = "timestamp", nullable = false) + @Column("timestamp") private OffsetDateTime timestamp; @NotNull - @Column(name = "ansattfra", nullable = false) + @Column("ansattfra") private LocalDate ansattfra; @Size(max = 255) - @Column(name = "arbeidsforhold_type") + @Column("arbeidsforhold_type") private String arbeidsforholdType; - @Column(name = "stillingsprosent") + @Column("stillingsprosent") private Integer stillingsprosent; @Override @@ -73,4 +68,9 @@ public boolean equals(Object o) { public int hashCode() { return new HashCodeBuilder(17, 37).append(getId()).append(getOrganisasjonsnummer()).append(getFolkeregisterident()).append(getTimestamp()).append(getAnsattfra()).append(getArbeidsforholdType()).append(getStillingsprosent()).toHashCode(); } + + @Override + public boolean isNew() { + return isNew; + } } \ No newline at end of file diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/entity/JobbParameter.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/entity/JobbParameter.java index f83a7253fc2..abc326613cb 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/entity/JobbParameter.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/entity/JobbParameter.java @@ -1,35 +1,38 @@ package no.nav.testnav.levendearbeidsforholdansettelse.entity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import lombok.Data; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.Transient; +import org.springframework.data.domain.Persistable; +import org.springframework.data.relational.core.mapping.Column; +import org.springframework.data.relational.core.mapping.Table; @Data -@Entity @Table(name = "jobb_parameter") -public class JobbParameter { +public class JobbParameter implements Persistable { + + @Transient + private boolean isNew; @Id @Size(max = 255) - @Column(name = "navn", nullable = false) + @Column("navn") private String navn; @Size(max = 255) @NotNull - @Column(name = "tekst", nullable = false) + @Column("tekst") private String tekst; @Size(max = 255) - @Column(name = "verdi") + @Column("verdi") private String verdi; - @Column(name = "verdier") + @Column("verdier") private String verdier; @Override @@ -45,4 +48,14 @@ public boolean equals(Object o) { public int hashCode() { return new HashCodeBuilder(17, 37).append(getNavn()).append(getTekst()).append(getVerdi()).append(getVerdier()).toHashCode(); } + + @Override + public String getId() { + return navn; + } + + @Override + public boolean isNew() { + return isNew; + } } \ No newline at end of file diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/repository/AnsettelseLoggRepository.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/repository/AnsettelseLoggRepository.java index b1407856edb..29b799d51dd 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/repository/AnsettelseLoggRepository.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/repository/AnsettelseLoggRepository.java @@ -1,12 +1,11 @@ package no.nav.testnav.levendearbeidsforholdansettelse.repository; import no.nav.testnav.levendearbeidsforholdansettelse.entity.AnsettelseLogg; -import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.reactive.ReactiveCrudRepository; +import reactor.core.publisher.Flux; -import java.util.List; +public interface AnsettelseLoggRepository extends ReactiveCrudRepository { -public interface AnsettelseLoggRepository extends CrudRepository { - - List findByFolkeregisterident(String ident); - List findByOrganisasjonsnummer(String orgnummer); + Flux findByFolkeregisterident(String ident); + Flux findByOrganisasjonsnummer(String orgnummer); } diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/repository/LoggRepository.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/repository/LoggRepository.java index 0159dc3608b..0985cce7e37 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/repository/LoggRepository.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/repository/LoggRepository.java @@ -1,7 +1,12 @@ package no.nav.testnav.levendearbeidsforholdansettelse.repository; import no.nav.testnav.levendearbeidsforholdansettelse.entity.AnsettelseLogg; -import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.repository.reactive.ReactiveSortingRepository; +import reactor.core.publisher.Flux; -public interface LoggRepository extends PagingAndSortingRepository { +public interface LoggRepository extends ReactiveSortingRepository { + + Flux> findAllBy(Pageable pageable); } diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/repository/ParameterRepository.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/repository/ParameterRepository.java index a4e5d29920e..ba7f62b5b7a 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/repository/ParameterRepository.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/repository/ParameterRepository.java @@ -1,11 +1,7 @@ package no.nav.testnav.levendearbeidsforholdansettelse.repository; import no.nav.testnav.levendearbeidsforholdansettelse.entity.JobbParameter; -import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.reactive.ReactiveCrudRepository; -import java.util.List; - -public interface ParameterRepository extends CrudRepository { - - List findAll(); +public interface ParameterRepository extends ReactiveCrudRepository { } diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/AnsettelseLoggService.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/AnsettelseLoggService.java index f5c59ad428f..de67a9b12ac 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/AnsettelseLoggService.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/AnsettelseLoggService.java @@ -6,6 +6,7 @@ import no.nav.testnav.levendearbeidsforholdansettelse.entity.AnsettelseLogg; import no.nav.testnav.levendearbeidsforholdansettelse.repository.AnsettelseLoggRepository; import org.springframework.stereotype.Service; +import reactor.core.publisher.Mono; import java.time.LocalDate; import java.time.OffsetDateTime; @@ -29,9 +30,10 @@ public class AnsettelseLoggService { * @param kanAnsette inneholder ident og orgnummer * @param parametere Stillingsprosent og arbeidsavtalarbeidsforholdType til personen. */ - public AnsettelseLogg lagreAnsettelse(KanAnsettesDTO kanAnsette, Map parametere){ + public Mono lagreAnsettelse(KanAnsettesDTO kanAnsette, Map parametere){ return ansettelseLoggRepository.save(AnsettelseLogg.builder() + .isNew(true) .folkeregisterident(kanAnsette.getIdent()) .organisasjonsnummer(kanAnsette.getOrgnummer()) .timestamp(OffsetDateTime.now()) diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/AnsettelseService.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/AnsettelseService.java index e6454dd36f8..a262caaf879 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/AnsettelseService.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/AnsettelseService.java @@ -17,11 +17,9 @@ import org.springframework.http.HttpStatusCode; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import reactor.core.publisher.Flux; import java.security.SecureRandom; -import java.time.Duration; import java.util.List; import java.util.Map; import java.util.Random; @@ -50,31 +48,29 @@ public class AnsettelseService { private final AnsettelseLoggService ansettelseLoggService; @Async - @Transactional public void runAnsettelseService() { var startTime = System.currentTimeMillis(); //Henter parametere fra db - var parametere = parameterService.hentParametere(); - log.info("Startet oppretting av {} personer i {} organisasjoner", parametere.get("antallPersoner"), - parametere.get("antallOrganisasjoner")); + var parametere = parameterService.hentParametere() + .doOnNext(param -> + log.info("Startet oppretting av {} personer i {} organisasjoner", + param.get("antallPersoner"), + param.get("antallOrganisasjoner"))); //Henter yrkeskoder for å gi tilfeldige yrker var yrkeskoder = kodeverkService.hentKodeverkValues(KodeverkNavn.YRKER.value); - if (yrkeskoder.isEmpty()) { - return; - } //Initialiserer liste over alderspenn og liste med tidligste og seneste gyldig dato for ansttelse var datoIntervaller = SannsynlighetVelger.getDatointervaller(); - + /**/ //Kjører ansettelse per org - Flux.range(0, (int) getParameterValue(parametere, ANTALL_ORGANISASJONER)) - .flatMap(count -> tenorConsumer.hentOrganisasjon()) - .flatMap(organisasjon -> sjekkOgSendinnArbeidsforhold(organisasjon, parametere, yrkeskoder, datoIntervaller)) + Flux.zip(parametere, yrkeskoder) + .flatMap(tuple -> Flux.range(0, (int) getParameterValue(tuple.getT1(), ANTALL_ORGANISASJONER)) + .flatMap(count -> tenorConsumer.hentOrganisasjon()) + .flatMap(organisasjon -> sjekkOgSendinnArbeidsforhold(organisasjon, tuple.getT1(), tuple.getT2(), datoIntervaller))) .collectList() - .doOnError(e -> log.error("AnsettelseService feilet", e)) .subscribe(status -> log.info("Oppretting ferdig, antall ansettelser {}, medgått tid {} sekunder", status.size(), (System.currentTimeMillis() - startTime) / 1000)); } @@ -89,16 +85,15 @@ private Flux sjekkOgSendinnArbeidsforhold(OrganisasjonResponseDT .flatMap(kanAnsettes -> ansettPerson(kanAnsettes, hentTilfeldigYrkeskode(yrkeskoder), parametere) .doOnNext(status -> log.info("Opprettet arbeidsforhold orgnummer {}, ident {}, status {}", kanAnsettes.getOrgnummer(), kanAnsettes.getIdent(), status)) - .map(status -> - ansettelseLoggService.lagreAnsettelse(kanAnsettes, parametere)))) - .delayElements(Duration.ofMinutes(1))); + .flatMap(status -> + ansettelseLoggService.lagreAnsettelse(kanAnsettes, parametere))))); } private Flux getPersonSomKanAnsettes(Integer stillingsprosent, DatoIntervall intervall, OrganisasjonResponseDTO organisasjon) { return getArbeidsforhold(intervall, organisasjon.getPostnummer()) - .map(arbeidsforhold1 -> Flux.fromIterable(arbeidsforhold1.getArbeidsforhold()) + .flatMap(arbeidsforhold1 -> Flux.fromIterable(arbeidsforhold1.getArbeidsforhold()) .map(Arbeidsforhold::getArbeidsavtaler) .flatMap(Flux::fromIterable) .filter(arbeidsavtale -> nonNull(arbeidsavtale.getBruksperiode()) && @@ -119,13 +114,17 @@ private Flux getPersonSomKanAnsettes(Integer stillingsprosent, D return getPersonSomKanAnsettes(stillingsprosent, intervall, organisasjon); } })) - .flatMap(Flux::from) .flatMap(Flux::from); } private Flux getArbeidsforhold(DatoIntervall datoIntervall, String postnummer) { return pdlService.getPerson(datoIntervall, postnummer) + .doOnNext(person -> log.info("Hentet person fra PDL med ident {}", + person.getFolkeregisteridentifikator().stream() + .filter(PdlPersonDTO.Person.Folkeregisteridentifikator::isIBRUK) + .map(PdlPersonDTO.Person.Folkeregisteridentifikator::getIdentifikasjonsnummer) + .findFirst().orElse(null))) .flatMap(person -> Flux.fromIterable(person.getFolkeregisteridentifikator()) .filter(PdlPersonDTO.Person.Folkeregisteridentifikator::isIBRUK) .map(PdlPersonDTO.Person.Folkeregisteridentifikator::getIdentifikasjonsnummer)) diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/ArbeidsforholdService.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/ArbeidsforholdService.java index 66b479053cc..c6cfaa45974 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/ArbeidsforholdService.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/ArbeidsforholdService.java @@ -16,7 +16,6 @@ import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.Duration; import java.time.LocalDate; import java.util.List; @@ -25,10 +24,10 @@ @RequiredArgsConstructor public class ArbeidsforholdService { - private static final String arbeidstakerType = "Person"; - private static final String arbeidsgiverType = "Organisasjon"; - private static final String arbeidstidsordning = "ikkeSkift"; - private static final String ansettelsesform = "fast"; + private static final String ARBEIDSTAKER_TYPE = "Person"; + private static final String ARBEIDSGIVER_TYPE = "Organisasjon"; + private static final String ARBEIDSTIDSORDNING = "ikkeSkift"; + private static final String ANSETTELSESFORM = "fast"; private static final double TIMER_HUNDRE_PROSENT = 37.5; private static final int HUNDRE_PROSENT = 100; @@ -54,8 +53,8 @@ public Flux getArbeidsforhold(String ident) { public Flux opprettArbeidsforhold(KanAnsettesDTO kanAnsettes, String yrke, String arbeidsforholdstype, Integer stillingsprosent) { - return aaregConsumer.opprettArbeidsforhold(lagArbeidsforhold(kanAnsettes, yrke, arbeidsforholdstype, stillingsprosent)) - .delayElements(Duration.ofSeconds(1)); + return aaregConsumer.opprettArbeidsforhold(lagArbeidsforhold(kanAnsettes, yrke, arbeidsforholdstype, stillingsprosent)); + } /** @@ -75,11 +74,11 @@ private Arbeidsforhold lagArbeidsforhold(KanAnsettesDTO kanAnsettes, String yrke .arbeidsforholdId(Integer.toString(kanAnsettes.getAntallEksisterendeArbeidsforhold() + 1)) .arbeidstaker(Person.builder() .offentligIdent(kanAnsettes.getIdent()) - .type(arbeidstakerType) + .type(ARBEIDSTAKER_TYPE) .build()) .arbeidsgiver(Organisasjon.builder() .organisasjonsnummer(kanAnsettes.getOrgnummer()) - .type(arbeidsgiverType) + .type(ARBEIDSGIVER_TYPE) .build()) .type(arbeidsforholdType) .ansettelsesperiode(Ansettelsesperiode.builder() @@ -89,10 +88,10 @@ private Arbeidsforhold lagArbeidsforhold(KanAnsettesDTO kanAnsettes, String yrke .build()) .arbeidsavtaler(List.of(OrdinaerArbeidsavtale.builder() .antallTimerPrUke(antallTimerPrUke) - .arbeidstidsordning(arbeidstidsordning) + .arbeidstidsordning(ARBEIDSTIDSORDNING) .stillingsprosent(stillingsprosent) .yrke(yrke) - .ansettelsesform(ansettelsesform) + .ansettelsesform(ANSETTELSESFORM) .sistStillingsendring(LocalDate.now()) .build())) .build(); diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/KodeverkService.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/KodeverkService.java index 82344771753..204361d88c0 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/KodeverkService.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/KodeverkService.java @@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; import no.nav.testnav.levendearbeidsforholdansettelse.consumers.KodeverkServiceConsumer; import org.springframework.stereotype.Service; +import reactor.core.publisher.Mono; import java.util.List; @@ -21,8 +22,8 @@ public class KodeverkService { * @param kodeverk String som er navnet på kodeverket. * @return En liste av String som er kodene. */ - public List hentKodeverkValues(String kodeverk){ + public Mono> hentKodeverkValues(String kodeverk){ + return kodeverkServiceConsumer.hentKodeverk(kodeverk); } - } diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/LoggService.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/LoggService.java index 1e6a225f1f4..db91b15c5e3 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/LoggService.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/LoggService.java @@ -7,9 +7,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; +import reactor.core.publisher.Flux; @Service @RequiredArgsConstructor @@ -18,20 +16,17 @@ public class LoggService { private final LoggRepository loggRepository; private final AnsettelseLoggRepository ansettelseLoggRepository; - @Transactional(readOnly = true) - public Page getAnsettelseLogg(Pageable pageable) { + public Flux> getAnsettelseLogg(Pageable pageable) { - return loggRepository.findAll(pageable); + return loggRepository.findAllBy(pageable); } - @Transactional(readOnly = true) - public List getIdent(String ident) { + public Flux getIdent(String ident) { return ansettelseLoggRepository.findByFolkeregisterident(ident); } - @Transactional(readOnly = true) - public List getOrgnummer(String orgnummer) { + public Flux getOrgnummer(String orgnummer) { return ansettelseLoggRepository.findByOrganisasjonsnummer(orgnummer); } diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/ParameterService.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/ParameterService.java index 2dee53e4cfd..50118cc9eb7 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/ParameterService.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/testnav/levendearbeidsforholdansettelse/service/ParameterService.java @@ -5,13 +5,11 @@ import no.nav.testnav.levendearbeidsforholdansettelse.domain.dto.ParameterDTO; import no.nav.testnav.levendearbeidsforholdansettelse.entity.JobbParameter; import no.nav.testnav.levendearbeidsforholdansettelse.repository.ParameterRepository; -import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.server.ResponseStatusException; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; import java.util.Arrays; -import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -30,16 +28,15 @@ public class ParameterService { * * @return Returnerer en liste av JobbParameterObjektene til alle parameterne */ - public List hentAlleParametere() { + public Flux hentAlleParametere() { - return parameterRepository.findAll().stream() + return parameterRepository.findAll() .map(parameter -> ParameterDTO.builder() .navn(parameter.getNavn()) .tekst(parameter.getTekst()) .verdi(parameter.getVerdi()) .verdier(Arrays.asList(parameter.getVerdier().split(","))) - .build()) - .toList(); + .build()); } /** @@ -47,9 +44,9 @@ public List hentAlleParametere() { * * @return ett map av JobbParameter navnet og verdier */ - public Map hentParametere() { + public Mono> hentParametere() { - return parameterRepository.findAll().stream() + return parameterRepository.findAll() .collect(Collectors.toMap(JobbParameter::getNavn, JobbParameter::getVerdi)); } @@ -60,14 +57,14 @@ public Map hentParametere() { * @param verdi ny verdi for parameter */ - @Transactional - public void updateVerdi(String parameternavn, String verdi) { + public Mono updateVerdi(String parameternavn, String verdi) { - parameterRepository.findById(parameternavn) - .ifPresentOrElse(parameter -> parameter.setVerdi(verdi), - () -> { - throw new ResponseStatusException(HttpStatus.NOT_FOUND, - "Parameter med navn %s ble ikke funnet".formatted(parameternavn)); - }); + return parameterRepository.findById(parameternavn) + .map(parameter -> { + parameter.setVerdi(verdi); + return parameter; + } + ) + .flatMap(parameterRepository::save); } } diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/resources/db/dev/h2-default-config.sql b/apps/levende-arbeidsforhold-ansettelse/src/main/resources/db/dev/h2-default-config.sql index 1f3f24c6599..8dcdec671ff 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/resources/db/dev/h2-default-config.sql +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/resources/db/dev/h2-default-config.sql @@ -1,8 +1,9 @@ -- Default verdier for kjøring med H2 -insert into jobb_parameter values('stillingsprosent','Stillingsprosent','80','20,30,40,50,60,70,80,90,100'); -insert into jobb_parameter values('intervall','Intervall for neste kjøring (timer)','1','1,5,12,24,168'); -insert into jobb_parameter values('antallOrganisasjoner','Antall Organisasjoner','1','1,5,10,15,20,25,30,35,40,45,50'); -insert into jobb_parameter values('antallPersoner','Antall Personer','1','1,10,15,20,25,30,35,40,45,50,1001'); -insert into jobb_parameter values('arbeidsforholdType','Arbeidsforhold Type','ordinaertArbeidsforhold','forenkletOppgjoersordning,frilanserOppdragstakerHonorarPersonerMm,maritimtArbeidsforhold,ordinaertArbeidsforhold'); +insert into jobb_parameter(navn, tekst, verdi, verdier) values('stillingsprosent','Stillingsprosent','80','20,30,40,50,60,70,80,90,100'); +insert into jobb_parameter(navn, tekst, verdi, verdier) values('intervall','Intervall for neste kjøring (timer)','1','1,5,12,24,168'); +insert into jobb_parameter(navn, tekst, verdi, verdier) values('antallOrganisasjoner','Antall Organisasjoner','1','1,5,10,15,20,25,30,35,40,45,50'); +insert into jobb_parameter(navn, tekst, verdi, verdier) values('antallPersoner','Antall Personer','1','1,10,15,20,25,30,35,40,45,50,1001'); +insert into jobb_parameter(navn, tekst, verdi, verdier) values('arbeidsforholdType','Arbeidsforhold Type','ordinaertArbeidsforhold','forenkletOppgjoersordning,frilanserOppdragstakerHonorarPersonerMm,maritimtArbeidsforhold,ordinaertArbeidsforhold'); + commit; \ No newline at end of file diff --git a/apps/levende-arbeidsforhold-ansettelse/src/test/resources/application.yaml b/apps/levende-arbeidsforhold-ansettelse/src/test/resources/application.yaml new file mode 100644 index 00000000000..5f0dd410aa7 --- /dev/null +++ b/apps/levende-arbeidsforhold-ansettelse/src/test/resources/application.yaml @@ -0,0 +1,6 @@ + +spring: + datasource: + url: jdbc:h2:mem:testdb + username: sa + password: \ No newline at end of file diff --git a/examples/reactive-rest-example/src/main/java/no/nav/testnav/examples/reactiverestexample/config/LocalVaultConfig.java b/examples/reactive-rest-example/src/main/java/no/nav/testnav/examples/reactiverestexample/config/LocalVaultConfig.java index afcd86c9291..ba9ff220d64 100644 --- a/examples/reactive-rest-example/src/main/java/no/nav/testnav/examples/reactiverestexample/config/LocalVaultConfig.java +++ b/examples/reactive-rest-example/src/main/java/no/nav/testnav/examples/reactiverestexample/config/LocalVaultConfig.java @@ -3,10 +3,8 @@ import no.nav.testnav.libs.vault.AbstractLocalVaultConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; -import org.springframework.vault.annotation.VaultPropertySource; @Configuration @Profile("local") -@VaultPropertySource(value = "azuread/prod/creds/team-dolly-lokal-app", ignoreSecretNotFound = false) public class LocalVaultConfig extends AbstractLocalVaultConfiguration { } \ No newline at end of file diff --git a/examples/reactive-rest-example/src/main/java/no/nav/testnav/examples/reactiverestexample/config/SecurityConfig.java b/examples/reactive-rest-example/src/main/java/no/nav/testnav/examples/reactiverestexample/config/SecurityConfig.java index 616aebdc994..80bde93dfc0 100644 --- a/examples/reactive-rest-example/src/main/java/no/nav/testnav/examples/reactiverestexample/config/SecurityConfig.java +++ b/examples/reactive-rest-example/src/main/java/no/nav/testnav/examples/reactiverestexample/config/SecurityConfig.java @@ -33,7 +33,8 @@ public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity httpS "/swagger-ui/**", "/swagger", "/error", - "/swagger-ui.html" + "/h2/**", + "/member/**" ).permitAll().anyExchange().authenticated()) .oauth2ResourceServer(oauth2RSConfig -> oauth2RSConfig.jwt(jwtSpec -> jwtSpec.authenticationManager(jwtReactiveAuthenticationManager))) .build(); diff --git a/examples/reactive-rest-example/src/main/resources/application-local.yml b/examples/reactive-rest-example/src/main/resources/application-local.yml index 94f1ea3900a..403f11ba4ba 100644 --- a/examples/reactive-rest-example/src/main/resources/application-local.yml +++ b/examples/reactive-rest-example/src/main/resources/application-local.yml @@ -1,10 +1,17 @@ +TOKEN_X_ISSUER: nada + spring: application: # Override name name: reactive-rest-example-local + h2: + console: + enabled: true + path: /h2 flyway: # InMemmory database url: jdbc:h2:mem:testdb username: sa - password: \ No newline at end of file + password: + driverClassName: org.h2.Driver \ No newline at end of file diff --git a/libs/servlet-insecure-security/build.gradle b/libs/servlet-insecure-security/build.gradle index 21a166d7a93..d212cb034ad 100644 --- a/libs/servlet-insecure-security/build.gradle +++ b/libs/servlet-insecure-security/build.gradle @@ -16,6 +16,5 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-webflux' - implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' } \ No newline at end of file