From 28267fd7cae4f041c4a1aed0e4dcb239e81c690d Mon Sep 17 00:00:00 2001 From: karimGl Date: Fri, 25 Oct 2024 21:49:39 +0200 Subject: [PATCH] chore(): index by aop --- chutney/server/pom.xml | 4 ++ .../chutneytesting/ServerConfiguration.java | 2 + .../execution/infra/aop/IndexingAspect.java | 46 +++++++++++++++++++ .../DatabaseExecutionHistoryRepository.java | 3 -- .../infra/raw/DatabaseTestCaseRepository.java | 1 - .../util/infra/TestInfraConfiguration.java | 8 ++++ 6 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 chutney/server/src/main/java/com/chutneytesting/execution/infra/aop/IndexingAspect.java diff --git a/chutney/server/pom.xml b/chutney/server/pom.xml index ab7d00701..73ab9b498 100644 --- a/chutney/server/pom.xml +++ b/chutney/server/pom.xml @@ -50,6 +50,10 @@ org.springframework.boot spring-boot-starter-data-jpa + + org.springframework.boot + spring-boot-starter-aop + org.springframework.boot spring-boot-starter-webflux diff --git a/chutney/server/src/main/java/com/chutneytesting/ServerConfiguration.java b/chutney/server/src/main/java/com/chutneytesting/ServerConfiguration.java index db6baef68..568ac0b90 100644 --- a/chutney/server/src/main/java/com/chutneytesting/ServerConfiguration.java +++ b/chutney/server/src/main/java/com/chutneytesting/ServerConfiguration.java @@ -61,11 +61,13 @@ import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.core.task.TaskExecutor; import org.springframework.core.task.support.ExecutorServiceAdapter; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @SpringBootApplication(exclude = {LiquibaseAutoConfiguration.class, ActiveMQAutoConfiguration.class, MongoAutoConfiguration.class}) +@EnableAspectJAutoProxy public class ServerConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(ServerConfiguration.class); diff --git a/chutney/server/src/main/java/com/chutneytesting/execution/infra/aop/IndexingAspect.java b/chutney/server/src/main/java/com/chutneytesting/execution/infra/aop/IndexingAspect.java new file mode 100644 index 000000000..0849431ca --- /dev/null +++ b/chutney/server/src/main/java/com/chutneytesting/execution/infra/aop/IndexingAspect.java @@ -0,0 +1,46 @@ +/* + * SPDX-FileCopyrightText: 2017-2024 Enedis + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +package com.chutneytesting.execution.infra.aop; + +import com.chutneytesting.execution.infra.storage.jpa.ScenarioExecutionReportEntity; +import com.chutneytesting.index.infra.ScenarioExecutionReportIndexRepository; +import java.util.List; +import java.util.Set; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.stereotype.Component; + +@Aspect +@Component +public class IndexingAspect { + private final ScenarioExecutionReportIndexRepository indexRepository; + + public IndexingAspect(ScenarioExecutionReportIndexRepository indexRepository) { + this.indexRepository = indexRepository; + } + + @After("execution(* com.chutneytesting.execution.infra.storage.ScenarioExecutionReportJpaRepository.save(..)) && args(reportEntity)") + public void index(ScenarioExecutionReportEntity reportEntity) { + indexRepository.save(reportEntity); + } + + @After("execution(* com.chutneytesting.execution.infra.storage.ScenarioExecutionReportJpaRepository.saveAll(..)) && args(reportEntities)") + public void indexAll(List reportEntities) { + indexRepository.saveAll(reportEntities); + } + + @After("execution(* com.chutneytesting.execution.infra.storage.ScenarioExecutionReportJpaRepository.delete(..)) && args(reportEntity)") + public void delete(ScenarioExecutionReportEntity reportEntity) { + indexRepository.delete(reportEntity.scenarioExecutionId()); + } + + @After("execution(* com.chutneytesting.execution.infra.storage.ScenarioExecutionReportJpaRepository.deleteAllById(..)) && args(scenarioExecutionIds)") + public void deleteAllById(Set scenarioExecutionIds) { + indexRepository.deleteAllById(scenarioExecutionIds); + } +} diff --git a/chutney/server/src/main/java/com/chutneytesting/execution/infra/storage/DatabaseExecutionHistoryRepository.java b/chutney/server/src/main/java/com/chutneytesting/execution/infra/storage/DatabaseExecutionHistoryRepository.java index d172923e3..493d15db0 100644 --- a/chutney/server/src/main/java/com/chutneytesting/execution/infra/storage/DatabaseExecutionHistoryRepository.java +++ b/chutney/server/src/main/java/com/chutneytesting/execution/infra/storage/DatabaseExecutionHistoryRepository.java @@ -134,7 +134,6 @@ public Execution store(String scenarioId, DetachedExecution detachedExecution) t scenarioExecution = scenarioExecutionsJpaRepository.save(scenarioExecution); ScenarioExecutionReportEntity reportEntity = new ScenarioExecutionReportEntity(scenarioExecution, detachedExecution.report()); scenarioExecutionReportJpaRepository.save(reportEntity); - scenarioExecutionReportIndexRepository.save(reportEntity); Execution execution = detachedExecution.attach(scenarioExecution.id(), scenarioId); return ImmutableExecutionHistory.Execution.builder().from(execution).build(); } @@ -186,7 +185,6 @@ private void updateReport(Execution execution) throws ReportNotFoundException { ); scenarioExecutionReport.updateReport(execution); scenarioExecutionReportJpaRepository.save(scenarioExecutionReport); - scenarioExecutionReportIndexRepository.save(scenarioExecutionReport); } @Override @@ -213,7 +211,6 @@ public void deleteExecutions(Set executionsIds) { campaignExecutionJpaRepository.deleteAllByIdInBatch(campaignExecutionsIds); scenarioExecutionReportJpaRepository.deleteAllById(executionsIds); - scenarioExecutionReportIndexRepository.deleteAllById(executionsIds); scenarioExecutionsJpaRepository.deleteAllByIdInBatch(executionsIds); } diff --git a/chutney/server/src/main/java/com/chutneytesting/scenario/infra/raw/DatabaseTestCaseRepository.java b/chutney/server/src/main/java/com/chutneytesting/scenario/infra/raw/DatabaseTestCaseRepository.java index e61550f0b..87f8b24c1 100644 --- a/chutney/server/src/main/java/com/chutneytesting/scenario/infra/raw/DatabaseTestCaseRepository.java +++ b/chutney/server/src/main/java/com/chutneytesting/scenario/infra/raw/DatabaseTestCaseRepository.java @@ -121,7 +121,6 @@ public void removeById(String scenarioId) { allExecutions.forEach(e -> { e.forCampaignExecution(null); scenarioExecutionsJpaRepository.save(e); - scenarioExecutionReportIndexRepository.delete(e.id()); }); List allCampaignScenarioEntities = campaignScenarioJpaRepository.findAllByScenarioId(scenarioId); diff --git a/chutney/server/src/test/java/util/infra/TestInfraConfiguration.java b/chutney/server/src/test/java/util/infra/TestInfraConfiguration.java index 108372fce..a85b58cbb 100644 --- a/chutney/server/src/test/java/util/infra/TestInfraConfiguration.java +++ b/chutney/server/src/test/java/util/infra/TestInfraConfiguration.java @@ -10,6 +10,7 @@ import static util.infra.AbstractLocalDatabaseTest.DB_CHANGELOG_DB_CHANGELOG_MASTER_XML; import com.chutneytesting.ServerConfiguration; +import com.chutneytesting.execution.infra.aop.IndexingAspect; import com.chutneytesting.index.infra.IndexConfig; import com.chutneytesting.index.infra.IndexRepository; import com.chutneytesting.index.infra.OnDiskIndexConfig; @@ -44,6 +45,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Profile; import org.springframework.jdbc.core.JdbcTemplate; @@ -61,6 +63,7 @@ @Configuration @EnableTransactionManagement(proxyTargetClass = true) @EnableJpa +@EnableAspectJAutoProxy @Profile("test-infra") class TestInfraConfiguration { @@ -203,6 +206,11 @@ public ScenarioExecutionReportIndexRepository scenarioExecutionReportIndexReposi return new ScenarioExecutionReportIndexRepository(indexRepository); } + @Bean + public IndexingAspect indexingAspect(ScenarioExecutionReportIndexRepository indexRepository) { + return new IndexingAspect(indexRepository); + } + @Primary @Bean