Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
# Changelog
All notable changes to this project will be documented in this file.

## [10.6.2]
### Changed
- Updated stream-investment to be able to seed to investment caboose

## [10.6.1]
### Changed
- Updated plan manager ingestion logic to attempt to retrieve plans if they don't exist in the pre-filled map.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.MediaType;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.http.codec.json.Jackson2JsonDecoder;
import org.springframework.http.codec.json.Jackson2JsonEncoder;
import org.springframework.web.reactive.function.client.WebClient;
Expand All @@ -41,9 +43,11 @@
* {@link InvestmentWebClientConfiguration} which should be imported alongside this class.
* The WebClient connection pool prevents resource exhaustion and 503 errors by limiting:
* <ul>
* <li>Maximum concurrent connections to 100 (configurable)</li>
* <li>Connection acquisition timeout to 45 seconds</li>
* <li>Read/Write timeouts to 30 seconds each</li>
* <li>Maximum concurrent connections (default 50, configurable via {@code max-connections})</li>
* <li>Connection acquisition timeout (default 90 seconds, configurable via
* {@code pending-acquire-timeout-millis})</li>
* <li>Read/Write timeouts (default 30 seconds each, configurable via {@code read-timeout-seconds} /
* {@code write-timeout-seconds})</li>
* </ul>
*/
@Configuration
Expand All @@ -60,16 +64,18 @@ public InvestmentClientConfig() {
/**
* Configuration for Investment service REST client (ClientApi).
*/
@Bean
@ConditionalOnMissingBean
@Bean("investmentApiClient")
@ConditionalOnMissingBean(name = "investmentApiClient")
@Primary
public ApiClient investmentApiClient(WebClient interServiceWebClient,
@Qualifier("investmentHttpClient") HttpClient investmentHttpClient,
ObjectMapper objectMapper,
DateFormat dateFormat) {
ObjectMapper mapper = objectMapper.copy();
mapper.setSerializationInclusion(Include.NON_EMPTY);
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
Builder mutate = interServiceWebClient.mutate();
Builder mutate = interServiceWebClient.mutate()
.clientConnector(new ReactorClientHttpConnector(investmentHttpClient));
mutate.codecs(clientCodecConfigurer -> {
Jackson2JsonEncoder encoder = new Jackson2JsonEncoder(mapper, MediaType.APPLICATION_JSON);
Jackson2JsonDecoder decoder = new Jackson2JsonDecoder(mapper, MediaType.APPLICATION_JSON);
Expand All @@ -81,80 +87,81 @@ public ApiClient investmentApiClient(WebClient interServiceWebClient,
}

@Bean
@ConditionalOnMissingBean
public ClientApi clientApi(ApiClient investmentApiClient) {
@Primary
public ClientApi clientApi(@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new ClientApi(investmentApiClient);
}

@Bean
@ConditionalOnMissingBean
public InvestmentProductsApi investmentProductsApi(ApiClient investmentApiClient) {
@Primary
public InvestmentProductsApi investmentProductsApi(@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new InvestmentProductsApi(investmentApiClient);
}

@Bean
@ConditionalOnMissingBean
public PortfolioApi portfolioApi(ApiClient investmentApiClient) {
@Primary
public PortfolioApi portfolioApi(@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new PortfolioApi(investmentApiClient);
}

@Bean
@ConditionalOnMissingBean
public FinancialAdviceApi financialAdviceApi(ApiClient investmentApiClient) {
@Primary
public FinancialAdviceApi financialAdviceApi(@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new FinancialAdviceApi(investmentApiClient);
}

@Bean
@ConditionalOnMissingBean
public AssetUniverseApi assetUniverseApi(ApiClient investmentApiClient) {
@Primary
public AssetUniverseApi assetUniverseApi(@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new AssetUniverseApi(investmentApiClient);
}

@Bean
@ConditionalOnMissingBean
public AllocationsApi allocationsApi(ApiClient investmentApiClient) {
@Primary
public AllocationsApi allocationsApi(@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new AllocationsApi(investmentApiClient);
}

@Bean
@ConditionalOnMissingBean
public InvestmentApi investmentApi(ApiClient investmentApiClient) {
@Primary
public InvestmentApi investmentApi(@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new InvestmentApi(investmentApiClient);
}

@Bean
@ConditionalOnMissingBean
public ContentApi contentApi(ApiClient investmentApiClient) {
@Primary
public ContentApi contentApi(@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new ContentApi(investmentApiClient);
}

@Bean
@ConditionalOnMissingBean
public PaymentsApi paymentsApi(ApiClient investmentApiClient) {
@Primary
public PaymentsApi paymentsApi(@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new PaymentsApi(investmentApiClient);
}

@Bean
@ConditionalOnMissingBean
public PortfolioTradingAccountsApi portfolioTradingAccountsApi(ApiClient investmentApiClient) {
@Primary
public PortfolioTradingAccountsApi portfolioTradingAccountsApi(
@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new PortfolioTradingAccountsApi(investmentApiClient);
}

@Bean
@ConditionalOnMissingBean
public CurrencyApi currencyApi(ApiClient investmentApiClient) {
@Primary
public CurrencyApi currencyApi(@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new CurrencyApi(investmentApiClient);
}

@Bean
@ConditionalOnMissingBean
public RiskAssessmentApi riskAssessmentApi(ApiClient investmentApiClient) {
@Primary
public RiskAssessmentApi riskAssessmentApi(@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new RiskAssessmentApi(investmentApiClient);
}

@Bean
@ConditionalOnMissingBean
public AsyncBulkGroupsApi asyncBulkGroupsApi(ApiClient investmentApiClient) {
@Primary
public AsyncBulkGroupsApi asyncBulkGroupsApi(@Qualifier("investmentApiClient") ApiClient investmentApiClient) {
return new AsyncBulkGroupsApi(investmentApiClient);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
package com.backbase.stream.configuration;

import lombok.Data;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
Expand All @@ -13,7 +12,6 @@
* {@link IngestConfigProperties}.
*/
@Data
@ConditionalOnBean(InvestmentServiceConfiguration.class)
@ConfigurationProperties(prefix = "backbase.bootstrap.ingestions.investment")
public class InvestmentIngestionConfigurationProperties {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;

Expand All @@ -37,8 +38,9 @@ public class InvestmentRestServiceApiConfiguration {
/**
* Configuration for Investment service REST client (ClientApi).
*/
@Bean
@ConditionalOnMissingBean
@Bean("restInvestmentApiClient")
@ConditionalOnMissingBean(name = "restInvestmentApiClient")
@Primary
public com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient(
@Qualifier("interServiceRestTemplate") RestTemplate restTemplate,
@Qualifier("restInvestmentObjectMapper") ObjectMapper restInvestmentObjectMapper) {
Expand All @@ -65,47 +67,54 @@ public ObjectMapper restInvestmentObjectMapper(ObjectMapper legacyObjectMapper)
}

@Bean
@ConditionalOnMissingBean
@Primary
public com.backbase.investment.api.service.sync.v1.ContentApi restContentApi(
com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient) {
@Qualifier("restInvestmentApiClient") com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient) {
return new com.backbase.investment.api.service.sync.v1.ContentApi(restInvestmentApiClient);
}

@Bean
@ConditionalOnMissingBean
@Primary
public com.backbase.investment.api.service.sync.v1.AssetUniverseApi restAssetUniverseApi(
com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient) {
@Qualifier("restInvestmentApiClient") com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient) {
return new com.backbase.investment.api.service.sync.v1.AssetUniverseApi(restInvestmentApiClient);
}

@Bean
public InvestmentRestNewsContentService investmentNewsContentService(ContentApi restContentApi,
com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient) {
@Primary
public InvestmentRestNewsContentService investmentNewsContentService(
@Qualifier("restContentApi") ContentApi restContentApi,
@Qualifier("restInvestmentApiClient") com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient) {
return new InvestmentRestNewsContentService(restContentApi, restInvestmentApiClient);
}

@Bean
public InvestmentRestDocumentContentService investmentRestContentDocumentService(ContentApi restContentApi,
com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient) {
@Primary
public InvestmentRestDocumentContentService investmentRestContentDocumentService(
@Qualifier("restContentApi") ContentApi restContentApi,
@Qualifier("restInvestmentApiClient") com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient) {
return new InvestmentRestDocumentContentService(restContentApi, restInvestmentApiClient);
}

@Bean
@Primary
public InvestmentRestAssetUniverseService investmentRestAssetUniverseService(
com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient,
@Qualifier("restInvestmentApiClient") com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient,
IngestConfigProperties portfolioProperties) {
return new InvestmentRestAssetUniverseService(restInvestmentApiClient, portfolioProperties);
}

@Bean
@Primary
public InvestmentRestModelPortfolioService investmentRestModelPortfolioService(
com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient) {
@Qualifier("restInvestmentApiClient") com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient) {
return new InvestmentRestModelPortfolioService(restInvestmentApiClient);
}

@Bean
@Primary
public InvestmentRestProductPortfolioService investmentRestProductPortfolioService(
com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient,
@Qualifier("restInvestmentApiClient") com.backbase.investment.api.service.sync.ApiClient restInvestmentApiClient,
IngestConfigProperties portfolioProperties) {
return new InvestmentRestProductPortfolioService(restInvestmentApiClient, portfolioProperties);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,26 +39,31 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;

@Import({
DbsApiClientsAutoConfiguration.class,
InvestmentClientConfig.class
InvestmentClientConfig.class,
InvestmentWebClientConfiguration.class,
InvestmentRestServiceApiConfiguration.class
})
@EnableConfigurationProperties({
InvestmentIngestionConfigurationProperties.class,
IngestConfigProperties.class
})
@RequiredArgsConstructor
@Configuration
@ConditionalOnProperty(name = "backbase.bootstrap.ingestions.investment.enabled")
@ConditionalOnProperty(name = "backbase.bootstrap.ingestions.investment.enabled", havingValue = "true")
public class InvestmentServiceConfiguration {

@Bean
@Primary
public InvestmentClientService investmentClientService(ClientApi clientApi) {
return new InvestmentClientService(clientApi);
}

@Bean
@Primary
public InvestmentModelPortfolioService investmentModelPortfolioService(FinancialAdviceApi financialAdviceApi,
InvestmentRestModelPortfolioService investmentRestModelPortfolioService,
IngestConfigProperties portfolioProperties) {
Expand All @@ -67,6 +72,7 @@ public InvestmentModelPortfolioService investmentModelPortfolioService(Financial
}

@Bean
@Primary
public InvestmentPortfolioProductService investmentPortfolioProductService(
InvestmentProductsApi investmentProductsApi, IngestConfigProperties portfolioProperties,
InvestmentModelPortfolioService modelPortfolioService,
Expand All @@ -76,6 +82,7 @@ public InvestmentPortfolioProductService investmentPortfolioProductService(
}

@Bean
@Primary
public InvestmentPortfolioService investmentPortfolioService(PortfolioApi portfolioApi, PaymentsApi paymentsApi,
PortfolioTradingAccountsApi portfolioTradingAccountsApi,
IngestConfigProperties portfolioProperties) {
Expand All @@ -84,27 +91,32 @@ public InvestmentPortfolioService investmentPortfolioService(PortfolioApi portfo
}

@Bean
@Primary
public InvestmentAssetUniverseService investmentAssetUniverseService(AssetUniverseApi assetUniverseApi,
InvestmentRestAssetUniverseService investmentRestAssetUniverseService) {
return new InvestmentAssetUniverseService(assetUniverseApi, investmentRestAssetUniverseService);
}

@Bean
@Primary
public AsyncTaskService asyncTaskService(AsyncBulkGroupsApi asyncBulkGroupsApi) {
return new AsyncTaskService(asyncBulkGroupsApi);
}

@Bean
@Primary
public InvestmentAssetPriceService investmentAssetPriceService(AssetUniverseApi assetUniverseApi) {
return new InvestmentAssetPriceService(assetUniverseApi);
}

@Bean
@Primary
public InvestmentIntradayAssetPriceService investmentIntradayAssetPriceService(AssetUniverseApi assetUniverseApi) {
return new InvestmentIntradayAssetPriceService(assetUniverseApi);
}

@Bean
@Primary
public InvestmentPortfolioAllocationService investmentPortfolioAllocationService(AllocationsApi allocationsApi,
AssetUniverseApi assetUniverseApi, InvestmentApi investmentApi,
IngestConfigProperties portfolioProperties) {
Expand All @@ -113,22 +125,26 @@ public InvestmentPortfolioAllocationService investmentPortfolioAllocationService
}

@Bean
@Primary
public InvestmentCurrencyService investmentCurrencyService(CurrencyApi currencyApi) {
return new InvestmentCurrencyService(currencyApi);
}

@Bean
@Primary
public InvestmentRiskAssessmentService investmentRiskAssessmentService(RiskAssessmentApi riskAssessmentApi) {
return new InvestmentRiskAssessmentService(riskAssessmentApi);
}

@Bean
@Primary
public InvestmentRiskQuestionaryService investmentRiskQuestionaryService(RiskAssessmentApi riskAssessmentApi,
IngestConfigProperties portfolioProperties) {
return new InvestmentRiskQuestionaryService(riskAssessmentApi, portfolioProperties);
}

@Bean
@Primary
public InvestmentSaga investmentSaga(InvestmentClientService investmentClientService,
InvestmentRiskAssessmentService investmentRiskAssessmentService,
InvestmentRiskQuestionaryService investmentRiskQuestionaryService,
Expand All @@ -145,7 +161,8 @@ public InvestmentSaga investmentSaga(InvestmentClientService investmentClientSer
}

@Bean
public InvestmentAssetUniverseSaga investmentStaticDataSaga(
@Primary
public InvestmentAssetUniverseSaga investmentAssetUniverseSaga(
InvestmentAssetUniverseService investmentAssetUniverseService,
InvestmentAssetPriceService investmentAssetPriceService,
InvestmentIntradayAssetPriceService investmentIntradayAssetPriceService,
Expand All @@ -159,6 +176,7 @@ public InvestmentAssetUniverseSaga investmentStaticDataSaga(
}

@Bean
@Primary
public InvestmentContentSaga investmentContentSaga(
InvestmentRestNewsContentService investmentRestNewsContentService,
InvestmentRestDocumentContentService investmentRestDocumentContentService,
Expand Down
Loading
Loading