Skip to content

Commit a45ea59

Browse files
Merge pull request #464 from Backbase/feature/PRSUM-10218-stream-services-update-new-developer
Feature/prsum 10218 stream services update new developer
2 parents e956e82 + 2d867ae commit a45ea59

File tree

33 files changed

+924
-1019
lines changed

33 files changed

+924
-1019
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22
All notable changes to this project will be documented in this file.
3+
4+
## [5.14.0](https://github.com/Backbase/stream-services/compare/5.13.0...5.14.0)
5+
### Changed
6+
- Updated arrangement-manager service-api from v2 to v3
7+
38
## [5.13.0](https://github.com/Backbase/stream-services/compare/5.12.0...5.13.0)
49
### Changed
510
- Bumping Backbase BOM to 2024.09-LTS
@@ -9,7 +14,6 @@ All notable changes to this project will be documented in this file.
914
### Added
1015
- Adding additional pmts mappings
1116

12-
1317
## [5.11.1](https://github.com/Backbase/stream-services/compare/5.11.0...5.11.1)
1418
### Changed
1519
- Updated plan-manager service api from 0.5.0 to 0.9.0

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
<parent>
66
<groupId>com.backbase.buildingblocks</groupId>
77
<artifactId>backbase-parent</artifactId>
8-
<version>17.0.0</version>
8+
<version>17.1.0</version>
99
<relativePath/>
1010
</parent>
1111

1212
<groupId>com.backbase.stream</groupId>
1313
<artifactId>stream-services</artifactId>
14-
<version>5.13.0</version>
14+
<version>5.14.0</version>
1515

1616
<packaging>pom</packaging>
1717
<name>Stream :: Services</name>

stream-access-control/access-control-core/src/main/java/com/backbase/stream/service/EntitlementsService.java

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package com.backbase.stream.service;
22

3-
import com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItem;
3+
import com.backbase.dbs.arrangement.api.service.v3.model.ArrangementItem;
44
import com.backbase.stream.exceptions.UserNotFoundException;
55
import com.backbase.stream.legalentity.model.AssignedPermission;
6+
import com.backbase.stream.legalentity.model.BaseProductGroup.ProductGroupTypeEnum;
67
import com.backbase.stream.legalentity.model.LegalEntity;
7-
import com.backbase.stream.legalentity.model.ProductGroup;
88
import com.backbase.stream.legalentity.model.ServiceAgreement;
99
import com.backbase.stream.legalentity.model.User;
1010
import com.backbase.stream.product.service.ArrangementService;
1111
import java.util.Collections;
1212
import java.util.List;
13-
import java.util.stream.Collectors;
1413
import lombok.AllArgsConstructor;
1514
import lombok.extern.slf4j.Slf4j;
1615
import reactor.core.publisher.Flux;
@@ -71,42 +70,10 @@ private Flux<AssignedPermission> getAssignedPermissionForServiceAgreement(
7170
.map(products -> setAssignedPermissionForArrangements(permission, products)));
7271
}
7372

74-
/**
75-
* Get All Products a legal entity has access to.
76-
*
77-
* @param legalEntityId Internal Legal Entity Id
78-
* @return List of Products
79-
*/
80-
public Flux<AccountArrangementItem> getProductsForInternalLegalEntityId(String legalEntityId) {
81-
return legalEntityService.getMasterServiceAgreementForInternalLegalEntityId(legalEntityId)
82-
.flatMapMany(sa -> accessGroupService.getDataGroupItemIdsByServiceAgreementId(sa.getInternalId())
83-
.flatMap(arrangementService::getArrangement)
84-
);
85-
}
86-
87-
/**
88-
* Get All Products a legal entity has access to.
89-
*
90-
* @param legalEntityId External Legal Entity Id
91-
* @return List of Products
92-
*/
93-
public Flux<AccountArrangementItem> getProductsForExternalLegalEntityId(String legalEntityId) {
94-
return legalEntityService.getLegalEntityByExternalId(legalEntityId).flux()
95-
.flatMap(legalEntity -> getProductsForInternalLegalEntityId(legalEntity.getInternalId()));
96-
}
97-
98-
private AssignedPermission setAssignedPermissionForJourneys(AssignedPermission permission, List<String> externalIds,
99-
ProductGroup.ProductGroupTypeEnum productGroupTypeEnum) {
100-
permission.setPermittedObjectExternalIds(externalIds);
101-
return permission;
102-
}
103-
10473
private AssignedPermission setAssignedPermissionForArrangements(AssignedPermission permission,
105-
List<AccountArrangementItem> products) {
106-
List<String> externalIds = products.stream().map(AccountArrangementItem::getExternalArrangementId)
107-
.collect(Collectors.toList());
108-
permission.setPermittedObjects(
109-
Collections.singletonMap(ProductGroup.ProductGroupTypeEnum.ARRANGEMENTS.name(), products));
74+
List<ArrangementItem> products) {
75+
List<String> externalIds = products.stream().map(ArrangementItem::getExternalArrangementId).toList();
76+
permission.setPermittedObjects(Collections.singletonMap(ProductGroupTypeEnum.ARRANGEMENTS.name(), products));
11077
permission.setPermittedObjectExternalIds(externalIds);
11178
return permission;
11279
}
@@ -115,9 +82,7 @@ public Mono<Tuple2<User, LegalEntity>> getLegalEntityForUserName(String username
11582
return userService.getUserByExternalId(username)
11683
.doOnNext(user -> log.info("Found user: {} for username: {}", user.getInternalId(), username))
11784
.switchIfEmpty(Mono.error(new UserNotFoundException("User not found for username: " + username)))
118-
.flatMap(user -> {
119-
return Mono.just(user).zipWith(legalEntityService.getLegalEntityByInternalId(user.getLegalEntityId()));
120-
});
85+
.flatMap(user -> Mono.just(user).zipWith(legalEntityService.getLegalEntityByInternalId(user.getLegalEntityId())));
12186
}
12287

12388

Original file line numberDiff line numberDiff line change
@@ -1,18 +1,33 @@
11
package com.backbase.stream.compositions.product.core.mapper;
22

3+
import com.backbase.dbs.arrangement.api.service.v3.model.ArrangementPutItem;
4+
import org.mapstruct.AfterMapping;
35
import org.mapstruct.InjectionStrategy;
46
import org.mapstruct.Mapper;
7+
import org.mapstruct.MappingTarget;
58
import org.springframework.stereotype.Component;
69

710
@Component
811
@Mapper(componentModel = "spring", injectionStrategy = InjectionStrategy.CONSTRUCTOR)
912
public interface ArrangementMapper {
10-
com.backbase.stream.compositions.product.api.model.AccountArrangementItemPut mapStreamToComposition(
11-
com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItemPut arrangement);
1213

13-
com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItemPut mapIntegrationToStream(
14-
com.backbase.stream.compositions.product.integration.client.model.AccountArrangementItemPut arrangementItem);
14+
com.backbase.stream.compositions.product.api.model.AccountArrangementItemPut mapStreamToComposition(ArrangementPutItem arrangement);
15+
16+
ArrangementPutItem mapIntegrationToStream(com.backbase.stream.compositions.product.integration.client.model.AccountArrangementItemPut arrangementItem);
17+
18+
ArrangementPutItem mapCompositionToStream(com.backbase.stream.compositions.product.api.model.AccountArrangementItemPut arrangementItem);
19+
20+
/**
21+
* The following after mapping has been set because the models are initializing both internalLegalEntities
22+
* and externalLegalEntities fields, which are Sets, and they need to have at least 1 element. For this scenario
23+
* if we do not set them as null, the validation rejects them.
24+
*
25+
* @param arrangementPutItem {@link ArrangementPutItem} instance to be used for data ingestion
26+
*/
27+
@AfterMapping
28+
default void setNullLegalEntities(@MappingTarget ArrangementPutItem arrangementPutItem) {
29+
arrangementPutItem.setInternalLegalEntities(null);
30+
arrangementPutItem.setExternalLegalEntities(null);
31+
}
1532

16-
com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItemPut mapCompositionToStream(
17-
com.backbase.stream.compositions.product.api.model.AccountArrangementItemPut arrangementItem);
1833
}

stream-compositions/services/product-composition-service/src/main/java/com/backbase/stream/compositions/product/core/model/ArrangementIngestPushRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.backbase.stream.compositions.product.core.model;
22

3-
import com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItemPut;
3+
import com.backbase.dbs.arrangement.api.service.v3.model.ArrangementPutItem;
44
import lombok.AllArgsConstructor;
55
import lombok.Builder;
66
import lombok.Getter;
@@ -11,7 +11,7 @@
1111
@Builder(toBuilder = true)
1212
@AllArgsConstructor
1313
public class ArrangementIngestPushRequest {
14-
private AccountArrangementItemPut arrangement;
14+
private ArrangementPutItem arrangement;
1515
private String arrangementInternalId;
1616
private String source;
1717
private RequestConfig config;

stream-compositions/services/product-composition-service/src/main/java/com/backbase/stream/compositions/product/core/model/ArrangementIngestResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.backbase.stream.compositions.product.core.model;
22

3-
import com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItemPut;
3+
import com.backbase.dbs.arrangement.api.service.v3.model.ArrangementPutItem;
44
import lombok.AllArgsConstructor;
55
import lombok.Builder;
66
import lombok.Getter;
@@ -11,7 +11,7 @@
1111
@Builder(toBuilder = true)
1212
@AllArgsConstructor
1313
public class ArrangementIngestResponse {
14-
private AccountArrangementItemPut arrangement;
14+
private ArrangementPutItem arrangement;
1515
private String arrangementInternalId;
1616
private String source;
1717
private RequestConfig config;

stream-compositions/services/product-composition-service/src/main/java/com/backbase/stream/compositions/product/core/service/impl/ArrangementIngestionServiceImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.backbase.buildingblocks.presentation.errors.BadRequestException;
44
import com.backbase.buildingblocks.presentation.errors.Error;
5-
import com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItemPut;
5+
import com.backbase.dbs.arrangement.api.service.v3.model.ArrangementPutItem;
66
import com.backbase.stream.compositions.product.core.model.ArrangementIngestPullRequest;
77
import com.backbase.stream.compositions.product.core.model.ArrangementIngestPushRequest;
88
import com.backbase.stream.compositions.product.core.model.ArrangementIngestResponse;
@@ -68,7 +68,7 @@ public Mono<ArrangementIngestResponse> pushArrangement(ArrangementIngestPushRequ
6868
}
6969

7070
private Mono<ArrangementIngestResponse> validate(ArrangementIngestResponse res) {
71-
Set<ConstraintViolation<AccountArrangementItemPut>> violations = validator.validate(res.getArrangement());
71+
Set<ConstraintViolation<ArrangementPutItem>> violations = validator.validate(res.getArrangement());
7272

7373
if (!CollectionUtils.isEmpty(violations)) {
7474
List<Error> errors = violations.stream().map(c -> new Error()

stream-compositions/services/product-composition-service/src/test/java/com/backbase/stream/compositions/product/core/mapper/ArrangementRestMapperTest.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
package com.backbase.stream.compositions.product.core.mapper;
22

3-
import com.backbase.stream.compositions.product.api.model.*;
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotNull;
5+
import static org.mockito.ArgumentMatchers.any;
6+
import static org.mockito.Mockito.when;
7+
8+
import com.backbase.stream.compositions.product.api.model.AccountArrangementItemPut;
9+
import com.backbase.stream.compositions.product.api.model.ArrangementIngestionConfig;
10+
import com.backbase.stream.compositions.product.api.model.ArrangementIngestionResponse;
11+
import com.backbase.stream.compositions.product.api.model.ArrangementPullIngestionRequest;
12+
import com.backbase.stream.compositions.product.api.model.ArrangementPushIngestionRequest;
413
import com.backbase.stream.compositions.product.core.model.ArrangementIngestPullRequest;
514
import com.backbase.stream.compositions.product.core.model.ArrangementIngestPushRequest;
615
import com.backbase.stream.compositions.product.core.model.ArrangementIngestResponse;
@@ -12,11 +21,6 @@
1221
import org.mockito.junit.jupiter.MockitoExtension;
1322
import org.springframework.http.ResponseEntity;
1423

15-
import static org.junit.jupiter.api.Assertions.assertEquals;
16-
import static org.junit.jupiter.api.Assertions.assertNotNull;
17-
import static org.mockito.ArgumentMatchers.any;
18-
import static org.mockito.Mockito.when;
19-
2024
@ExtendWith(MockitoExtension.class)
2125
class ArrangementRestMapperTest {
2226
private static final String ARRANGEMENT_ID = "arrangementId";
@@ -37,7 +41,7 @@ void mapPushRequest() {
3741
AccountArrangementItemPut arrangementItemPut = new AccountArrangementItemPut();
3842

3943
when(arrangementMapper.mapCompositionToStream(arrangementItemPut))
40-
.thenReturn(new com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItemPut());
44+
.thenReturn(new com.backbase.dbs.arrangement.api.service.v3.model.ArrangementPutItem());
4145

4246
when(chainsMapper.map(any()))
4347
.thenReturn(RequestConfig.builder().build());
@@ -79,8 +83,8 @@ void mapPullRequest() {
7983

8084
@Test
8185
void mapResponse() {
82-
com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItemPut streamArrangement =
83-
new com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItemPut();
86+
com.backbase.dbs.arrangement.api.service.v3.model.ArrangementPutItem streamArrangement =
87+
new com.backbase.dbs.arrangement.api.service.v3.model.ArrangementPutItem();
8488

8589
AccountArrangementItemPut compositionArrangement = new AccountArrangementItemPut();
8690

@@ -89,7 +93,7 @@ void mapResponse() {
8993

9094
ArrangementIngestResponse response = ArrangementIngestResponse
9195
.builder()
92-
.arrangement(new com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItemPut())
96+
.arrangement(new com.backbase.dbs.arrangement.api.service.v3.model.ArrangementPutItem())
9397
.build();
9498

9599
ResponseEntity<ArrangementIngestionResponse> responseEntity = arrangementRestMapper.mapResponse(response);

stream-compositions/services/product-composition-service/src/test/java/com/backbase/stream/compositions/product/core/service/impl/ArrangementIntegrationServiceImplTest.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package com.backbase.stream.compositions.product.core.service.impl;
22

3+
import static org.mockito.ArgumentMatchers.any;
4+
import static org.mockito.Mockito.when;
5+
36
import com.backbase.stream.compositions.product.core.mapper.ArrangementMapper;
47
import com.backbase.stream.compositions.product.core.model.ArrangementIngestPullRequest;
58
import com.backbase.stream.compositions.product.core.model.ArrangementIngestResponse;
69
import com.backbase.stream.compositions.product.integration.client.ArrangementIntegrationApi;
710
import com.backbase.stream.compositions.product.integration.client.model.AccountArrangementItemPut;
811
import com.backbase.stream.compositions.product.integration.client.model.PullArrangementResponse;
12+
import java.util.Objects;
913
import org.junit.jupiter.api.Test;
1014
import org.junit.jupiter.api.extension.ExtendWith;
1115
import org.mockito.InjectMocks;
@@ -14,9 +18,6 @@
1418
import reactor.core.publisher.Mono;
1519
import reactor.test.StepVerifier;
1620

17-
import static org.mockito.ArgumentMatchers.any;
18-
import static org.mockito.Mockito.when;
19-
2021
@ExtendWith(MockitoExtension.class)
2122
class ArrangementIntegrationServiceImplTest {
2223
@InjectMocks
@@ -44,14 +45,12 @@ void pullArrangement_Success() {
4445
.name("name")
4546
)));
4647
when(arrangementMapper.mapIntegrationToStream(any()))
47-
.thenReturn(new com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItemPut());
48+
.thenReturn(new com.backbase.dbs.arrangement.api.service.v3.model.ArrangementPutItem());
4849

4950
Mono<ArrangementIngestResponse> responseMono = arrangementIntegrationService.pullArrangement(request);
5051

5152
StepVerifier.create(responseMono)
52-
.expectNextMatches(item -> {
53-
return item != null;
54-
})
53+
.expectNextMatches(Objects::nonNull)
5554
.verifyComplete();
5655
}
5756

stream-compositions/services/product-composition-service/src/test/java/com/backbase/stream/compositions/product/http/ProductControllerIT.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package com.backbase.stream.compositions.product.http;
22

3-
import com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItemPut;
3+
import static org.mockito.ArgumentMatchers.any;
4+
import static org.mockito.Mockito.when;
5+
import static org.mockserver.integration.ClientAndServer.startClientAndServer;
6+
import static org.mockserver.model.HttpRequest.request;
7+
import static org.mockserver.model.HttpResponse.response;
8+
9+
import com.backbase.dbs.arrangement.api.service.v3.model.ArrangementPutItem;
410
import com.backbase.stream.compositions.paymentorder.client.model.PaymentOrderIngestionResponse;
511
import com.backbase.stream.compositions.paymentorder.client.model.PaymentOrderPostResponse;
612
import com.backbase.stream.compositions.product.api.model.ArrangementPullIngestionRequest;
@@ -20,12 +26,16 @@
2026
import com.fasterxml.jackson.core.JsonProcessingException;
2127
import com.fasterxml.jackson.databind.JsonNode;
2228
import com.fasterxml.jackson.databind.ObjectMapper;
29+
import java.io.IOException;
30+
import java.net.URI;
31+
import java.util.List;
32+
import java.util.Map;
33+
import java.util.concurrent.TimeUnit;
2334
import lombok.extern.slf4j.Slf4j;
2435
import org.apache.activemq.broker.BrokerService;
2536
import org.junit.jupiter.api.AfterEach;
2637
import org.junit.jupiter.api.BeforeAll;
2738
import org.junit.jupiter.api.BeforeEach;
28-
import org.junit.jupiter.api.Disabled;
2939
import org.junit.jupiter.api.Test;
3040
import org.junit.jupiter.api.extension.ExtendWith;
3141
import org.mockserver.client.MockServerClient;
@@ -41,18 +51,6 @@
4151
import org.springframework.test.web.reactive.server.WebTestClient;
4252
import reactor.core.publisher.Mono;
4353

44-
import java.io.IOException;
45-
import java.net.URI;
46-
import java.util.List;
47-
import java.util.Map;
48-
import java.util.concurrent.TimeUnit;
49-
50-
import static org.mockito.ArgumentMatchers.any;
51-
import static org.mockito.Mockito.when;
52-
import static org.mockserver.integration.ClientAndServer.startClientAndServer;
53-
import static org.mockserver.model.HttpRequest.request;
54-
import static org.mockserver.model.HttpResponse.response;
55-
5654
@DirtiesContext
5755
@SpringBootTest
5856
@AutoConfigureWebTestClient
@@ -220,7 +218,7 @@ void pushIngestProduct_Success() throws Exception {
220218
@Test
221219
void pullIngestArrangement_Success() throws Exception {
222220
when(arrangementService.updateArrangement(any()))
223-
.thenReturn(Mono.just(new AccountArrangementItemPut()));
221+
.thenReturn(Mono.just(new ArrangementPutItem()));
224222

225223
ArrangementPullIngestionRequest pullIngestionRequest =
226224
new ArrangementPullIngestionRequest()
@@ -266,7 +264,7 @@ void pushIngestArrangement_Success() throws IOException {
266264
mapper.treeToValue(node, com.backbase.stream.compositions.product.api.model.AccountArrangementItemPut.class);
267265

268266
when(arrangementService.updateArrangement(any()))
269-
.thenReturn(Mono.just(new AccountArrangementItemPut()));
267+
.thenReturn(Mono.just(new ArrangementPutItem()));
270268

271269
ArrangementPushIngestionRequest pushIngestionRequest =
272270
new ArrangementPushIngestionRequest()

stream-cursor/cursor-publishers/src/main/java/com/backbase/stream/cursor/events/AbstractLoginEventListener.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.backbase.stream.cursor.events;
22

3-
import com.backbase.dbs.arrangement.api.service.v2.model.AccountArrangementItem;
3+
import com.backbase.dbs.arrangement.api.service.v3.model.ArrangementItem;
44
import com.backbase.stream.TransactionService;
55
import com.backbase.stream.cursor.configuration.CursorServiceConfigurationProperties;
66
import com.backbase.stream.cursor.model.IngestionCursor;
@@ -85,13 +85,11 @@ private Flux<IngestionCursor> createIngestionCursor(User user, LegalEntity legal
8585
List<IngestionCursor> ingestionCursors = new ArrayList<>();
8686
ProductGroup.ProductGroupTypeEnum arrangements1 = ProductGroup.ProductGroupTypeEnum.ARRANGEMENTS;
8787
Object arrangements = assignedPermission.getPermittedObjects().get(arrangements1.name());
88-
if (arrangements instanceof List && (((List) arrangements).get(0) instanceof AccountArrangementItem)) {
89-
List<AccountArrangementItem> products = (List<AccountArrangementItem>) arrangements;
90-
91-
for (AccountArrangementItem product : products) {
88+
if (arrangements instanceof List && (((List<?>) arrangements).getFirst() instanceof ArrangementItem)) {
89+
@SuppressWarnings("unchecked") List<ArrangementItem> products = (List<ArrangementItem>) arrangements;
9290

91+
for (ArrangementItem product : products) {
9392
IngestionCursor ingestionCursor = createLoginIngestionCursor(loginEvent, user, legalEntity);
94-
9593
ingestionCursor.setArrangementId(product.getId());
9694
ingestionCursor.setExternalArrangementId(product.getExternalArrangementId());
9795
// Make this configurable?

0 commit comments

Comments
 (0)