diff --git a/apps/dolly-backend/build.gradle b/apps/dolly-backend/build.gradle index 06ea4af18d2..20af577007e 100644 --- a/apps/dolly-backend/build.gradle +++ b/apps/dolly-backend/build.gradle @@ -90,10 +90,10 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-validation' - implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' implementation 'org.springframework.retry:spring-retry:2.0.0' -// implementation 'org.opensearch.client:spring-data-opensearch:1.1.0' + implementation 'org.opensearch.client:spring-data-opensearch-starter:1.2.0' + implementation 'org.opensearch.client:spring-data-opensearch:1.2.0' // implementation 'com.fasterxml.jackson.core:jackson-core:2.15.2' // implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.16.1' diff --git a/apps/dolly-backend/config.test.yml b/apps/dolly-backend/config.test.yml index 4f0207b495c..242b534db43 100644 --- a/apps/dolly-backend/config.test.yml +++ b/apps/dolly-backend/config.test.yml @@ -72,13 +72,14 @@ spec: tenant: nav.no image: {{image}} openSearch: - instance: dolly-bestilling-test + instance: dolly-bestilling-dev access: admin env: - name: SPRING_PROFILES_ACTIVE value: dev envFrom: - secret: user-encryption-dev + - secret: dolly-bestilling-dev replicas: min: 1 max: 1 diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java b/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java index 317d2b3da4a..3ec4b099b9b 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java @@ -1,9 +1,12 @@ package no.nav.dolly; +import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; -@SpringBootApplication +@Slf4j +@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class}) public class DollyBackendApplicationStarter { public static void main(String[] args) { diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/config/ElasticSearchConfig.java b/apps/dolly-backend/src/main/java/no/nav/dolly/config/ElasticSearchConfig.java index 919334baff4..2db54023cb9 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/config/ElasticSearchConfig.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/config/ElasticSearchConfig.java @@ -1,34 +1,41 @@ package no.nav.dolly.config; +import org.opensearch.client.RestHighLevelClient; +import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration; +import org.opensearch.data.client.orhlc.ClientConfiguration; +import org.opensearch.data.client.orhlc.RestClients; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; -import org.springframework.data.elasticsearch.client.ClientConfiguration; -import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchConfiguration; import java.time.Duration; -@Profile({"prod", "dev"}) +@Profile("!test") @Configuration -public class ElasticSearchConfig extends ReactiveElasticsearchConfiguration { +public class ElasticSearchConfig extends AbstractOpenSearchConfiguration { - @Value("${OPEN_SEARCH_USERNAME}") + @Value("${open.search.username}") private String username; - @Value("${OPEN_SEARCH_PASSWORD}") + @Value("${open.search.password}") private String password; - @Value("${OPEN_SEARCH_URI}") + @Value("${open.search.uri}") private String uri; + @Value("${open.search.port}") + private String port; + @Override - public ClientConfiguration clientConfiguration() { - return ClientConfiguration.builder() - .connectedTo(uri.replace("https://", "")) + public RestHighLevelClient opensearchClient() { + + return RestClients.create(ClientConfiguration.builder() + .connectedTo(String.format("%s:%s", uri, port)) .usingSsl() .withBasicAuth(username, password) .withConnectTimeout(Duration.ofSeconds(10)) .withSocketTimeout(Duration.ofSeconds(5)) - .build(); + .build()) + .rest(); } } \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/config/ElasticSearchLocalConfig.java b/apps/dolly-backend/src/main/java/no/nav/dolly/config/ElasticSearchLocalConfig.java deleted file mode 100644 index 94648b36a21..00000000000 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/config/ElasticSearchLocalConfig.java +++ /dev/null @@ -1,24 +0,0 @@ -package no.nav.dolly.config; - - -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.data.elasticsearch.client.ClientConfiguration; -import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchConfiguration; -import org.springframework.data.elasticsearch.config.EnableElasticsearchAuditing; -import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; - -@Profile("local") -@Configuration -@EnableElasticsearchRepositories -@EnableElasticsearchAuditing -public class ElasticSearchLocalConfig extends ReactiveElasticsearchConfiguration { - - @Override - public ClientConfiguration clientConfiguration() { - return ClientConfiguration.builder() - .connectedTo("localhost:9200") - .usingSsl() - .build(); - } -} \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/elastic/BestillingElasticRepository.java b/apps/dolly-backend/src/main/java/no/nav/dolly/elastic/BestillingElasticRepository.java index d5b1df4c683..b47b479e08f 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/elastic/BestillingElasticRepository.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/elastic/BestillingElasticRepository.java @@ -1,7 +1,6 @@ package no.nav.dolly.elastic; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; - -public interface BestillingElasticRepository extends ElasticsearchRepository { +public interface BestillingElasticRepository { +// public interface BestillingElasticRepository extends ElasticsearchRepository { } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/provider/api/ElasticController.java b/apps/dolly-backend/src/main/java/no/nav/dolly/provider/api/ElasticController.java new file mode 100644 index 00000000000..5a556a0a8ac --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/provider/api/ElasticController.java @@ -0,0 +1,48 @@ +package no.nav.dolly.provider.api; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; +import no.nav.dolly.domain.jpa.Bestilling; +import no.nav.dolly.domain.resultset.RsDollyBestilling; +import no.nav.dolly.service.ElasticService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/api/v1/elastic") +@RequiredArgsConstructor +public class ElasticController { + + private final ElasticService elasticService; + + @Deprecated + @PostMapping + public void lagreBestilling(@RequestBody Wrapper bestilling) { + + elasticService.lagreBestillingMedStatus(bestilling.getDollyBestilling(), bestilling.getBestillingStatus()); + } + + @GetMapping + public List getIdenter() { + + return null; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Wrapper { + + private RsDollyBestilling dollyBestilling; + private Bestilling bestillingStatus; + } +} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/service/BestillingService.java b/apps/dolly-backend/src/main/java/no/nav/dolly/service/BestillingService.java index 62824d8bdc9..ef971588950 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/service/BestillingService.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/service/BestillingService.java @@ -19,8 +19,6 @@ import no.nav.dolly.domain.resultset.aareg.RsAareg; import no.nav.dolly.domain.resultset.aareg.RsOrganisasjon; import no.nav.dolly.domain.resultset.entity.bestilling.RsBestillingFragment; -import no.nav.dolly.elastic.BestillingElasticRepository; -import no.nav.dolly.elastic.ElasticBestilling; import no.nav.dolly.exceptions.ConstraintViolationException; import no.nav.dolly.exceptions.DollyFunctionalException; import no.nav.dolly.exceptions.NotFoundException; @@ -77,7 +75,6 @@ public class BestillingService { private final TestgruppeRepository testgruppeRepository; private final BrukerService brukerService; private final GetUserInfo getUserInfo; - private final BestillingElasticRepository bestillingElasticRepository; private final MapperFacade mapperFacade; public Bestilling fetchBestillingById(Long bestillingId) { @@ -224,7 +221,6 @@ public Bestilling saveBestilling(RsDollyUpdateRequest request, String ident) { if (isNotBlank(request.getMalBestillingNavn())) { bestillingMalService.saveBestillingMal(bestilling, request.getMalBestillingNavn(), bruker); } - saveBestillingToElasticServer(request); return saveBestillingToDB(bestilling); } @@ -248,7 +244,6 @@ public Bestilling saveBestilling(Long gruppeId, RsDollyBestilling request, Integ if (isNotBlank(request.getMalBestillingNavn())) { bestillingMalService.saveBestillingMal(bestilling, request.getMalBestillingNavn(), bruker); } - saveBestillingToElasticServer(request); return saveBestillingToDB(bestilling); } @@ -335,7 +330,6 @@ public Bestilling saveBestilling(Long gruppeId, RsDollyImportFraPdlRequest reque if (isNotBlank(request.getMalBestillingNavn())) { bestillingMalService.saveBestillingMal(bestilling, request.getMalBestillingNavn(), bruker); } - saveBestillingToElasticServer(request); return saveBestillingToDB(bestilling); } @@ -346,7 +340,6 @@ public Bestilling saveBestilling(Long gruppeId, RsDollyBestillingLeggTilPaaGrupp var size = identRepository.countByTestgruppe(gruppeId); log.info("Antall testidenter {} i gruppe {} ", size, gruppeId); fixAaregAbstractClassProblem(request.getAareg()); - saveBestillingToElasticServer(request); return saveBestillingToDB( Bestilling.builder() .gruppe(gruppe) @@ -449,11 +442,4 @@ private static void fixAaregAbstractClassProblem(List aaregdata) { } }); } - - private void saveBestillingToElasticServer(RsDollyBestilling request) { - - if (request.isNonEmpty()) { - bestillingElasticRepository.save(mapperFacade.map(request, ElasticBestilling.class)); - } - } } \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/service/ElasticService.java b/apps/dolly-backend/src/main/java/no/nav/dolly/service/ElasticService.java new file mode 100644 index 00000000000..5b69a3c775b --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/service/ElasticService.java @@ -0,0 +1,46 @@ +package no.nav.dolly.service; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import ma.glasnost.orika.MapperFacade; +import no.nav.dolly.domain.jpa.Bestilling; +import no.nav.dolly.domain.jpa.BestillingProgress; +import no.nav.dolly.domain.resultset.RsDollyBestilling; +import no.nav.dolly.elastic.ElasticBestilling; +import org.springframework.data.elasticsearch.core.ElasticsearchOperations; +import org.springframework.stereotype.Service; + +import java.util.List; + +import static org.apache.commons.lang3.StringUtils.isBlank; + +@Slf4j +@Service +@RequiredArgsConstructor +public class ElasticService { + + private final MapperFacade mapperFacade; +// private final ElasticsearchRepository elasticsearchRepository; + private final ElasticsearchOperations elasticsearchOperations; + + public void lagreBestillingMedStatus(RsDollyBestilling dollyBestilling, Bestilling bestillingMedStatus) { + + var elasticBestilling = mapperFacade.map(dollyBestilling, ElasticBestilling.class); + elasticBestilling.setIdenter(bestillingMedStatus.getProgresser().stream() + .filter(BestillingProgress::isIdentGyldig) + .filter(progress -> isBlank(progress.getFeil())) + .map(BestillingProgress::getIdent) + .toList()); + +// var resultat = elasticsearchRepository.save(elasticBestilling); +// +// log.info("Elastic search record lagret {}", resultat); + } + + public List getIdenterForBestilling() { + + +// elasticsearchOperations.search() + return null; + } +} diff --git a/apps/dolly-backend/src/main/resources/application-local.yaml b/apps/dolly-backend/src/main/resources/application-local.yaml index 3d27ef8cb0c..12f13c16810 100644 --- a/apps/dolly-backend/src/main/resources/application-local.yaml +++ b/apps/dolly-backend/src/main/resources/application-local.yaml @@ -40,6 +40,13 @@ management: path-mapping: prometheus: "prometheus" +open: + search: + username: dolly + password: kBU0JYmilht2pGRQ + uri: opensearch-dolly-testdata-gjeter-nav-dev.aivencloud.com + port: 26482 + consumers: testnav-pdl-forvalter: name: testnav-pdl-forvalter-dev diff --git a/apps/dolly-backend/src/test/java/no/nav/dolly/mapper/strategy/TestgruppeMappingStrategyTest.java b/apps/dolly-backend/src/test/java/no/nav/dolly/mapper/strategy/TestgruppeMappingStrategyTest.java index b137ab3242e..afce5989a8b 100644 --- a/apps/dolly-backend/src/test/java/no/nav/dolly/mapper/strategy/TestgruppeMappingStrategyTest.java +++ b/apps/dolly-backend/src/test/java/no/nav/dolly/mapper/strategy/TestgruppeMappingStrategyTest.java @@ -13,6 +13,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; import java.time.LocalDate; import java.util.List; @@ -21,6 +22,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +@ActiveProfiles("test") @SpringBootTest class TestgruppeMappingStrategyTest {