Skip to content

Commit

Permalink
feat: add OPF integration
Browse files Browse the repository at this point in the history
Closes: CXSPA-8645
  • Loading branch information
Matejk00 authored Nov 22, 2024
1 parent c4d4d14 commit 35bbcfe
Show file tree
Hide file tree
Showing 514 changed files with 27,432 additions and 69 deletions.
14 changes: 9 additions & 5 deletions .env-cmdrc
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@
"CX_EPD_VISUALIZATION": "true",
"CX_BASE_URL": "https://api.cp96avkh5f-integrati1-d1-public.model-t.cc.commerce.ondemand.com"
},
"opf": {
"CX_OPF": "true",
"CX_BASE_URL": "https://api.cp96avkh5f-integrati2-s1-public.model-t.cc.commerce.ondemand.com"
},
"cpq": {
"CX_BASE_URL": "https://api.cg79x9wuu9-eccommerc1-s1-public.model-t.myhybris.cloud/",
"CX_B2B": "true",
Expand All @@ -55,7 +59,7 @@
"CX_REQUESTED_DELIVERY_DATE": "true",
"CX_PDF_INVOICES": "true"
},
"omf":{
"omf": {
"CX_BASE_URL": "https://api.cg79x9wuu9-eccommerc1-s9-public.model-t.myhybris.cloud",
"CX_OMF": "true"
},
Expand All @@ -71,22 +75,22 @@
"CX_BASE_URL": "https://api.cg79x9wuu9-eccommerc1-s5-public.model-t.myhybris.cloud",
"CX_PDF_INVOICES": "true"
},
"my-account-v2":{
"my-account-v2": {
"CX_BASE_URL": "https://api.cg79x9wuu9-eccommerc1-s5-public.model-t.myhybris.cloud",
"CX_PDF_INVOICES": "true",
"CX_MY_ACCOUNT_V2": "true"
},
"cdp":{
"cdp": {
"CX_CDP": "true",
"CX_BASE_URL": "https://api.cg79x9wuu9-eccommerc1-s5-public.model-t.myhybris.cloud",
"CX_PDF_INVOICES": "true",
"CX_MY_ACCOUNT_V2": "true"
},
"opps":{
"opps": {
"CX_BASE_URL": "https://api.cg79x9wuu9-eccommerc1-s5-public.model-t.myhybris.cloud",
"CX_OPPS": "true"
},
"s4-service":{
"s4-service": {
"CX_BASE_URL": "https://api.cg79x9wuu9-eccommerc1-s8-public.model-t.myhybris.cloud",
"CX_S4_SERVICE": "true",
"CX_B2B": "true"
Expand Down
79 changes: 79 additions & 0 deletions core-libs/setup/tsconfig.spec.json
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,85 @@
"@spartacus/omf": ["../../integration-libs/omf/public_api"],
"@spartacus/omf/order": ["../../integration-libs/omf/order/public_api"],
"@spartacus/omf/root": ["../../integration-libs/omf/root/public_api"],
"@spartacus/opf/base/components": [
"../../integration-libs/opf/base/components/public_api"
],
"@spartacus/opf/base/core": [
"../../integration-libs/opf/base/core/public_api"
],
"@spartacus/opf/base": ["../../integration-libs/opf/base/public_api"],
"@spartacus/opf/base/opf-api": [
"../../integration-libs/opf/base/opf-api/public_api"
],
"@spartacus/opf/base/root": [
"../../integration-libs/opf/base/root/public_api"
],
"@spartacus/opf/checkout/assets": [
"../../integration-libs/opf/checkout/assets/public_api"
],
"@spartacus/opf/checkout/components": [
"../../integration-libs/opf/checkout/components/public_api"
],
"@spartacus/opf/checkout": [
"../../integration-libs/opf/checkout/public_api"
],
"@spartacus/opf/checkout/root": [
"../../integration-libs/opf/checkout/root/public_api"
],
"@spartacus/opf/cta/components": [
"../../integration-libs/opf/cta/components/public_api"
],
"@spartacus/opf/cta/core": [
"../../integration-libs/opf/cta/core/public_api"
],
"@spartacus/opf/cta": ["../../integration-libs/opf/cta/public_api"],
"@spartacus/opf/cta/opf-api": [
"../../integration-libs/opf/cta/opf-api/public_api"
],
"@spartacus/opf/cta/root": [
"../../integration-libs/opf/cta/root/public_api"
],
"@spartacus/opf/global-functions/core": [
"../../integration-libs/opf/global-functions/core/public_api"
],
"@spartacus/opf/global-functions": [
"../../integration-libs/opf/global-functions/public_api"
],
"@spartacus/opf/global-functions/root": [
"../../integration-libs/opf/global-functions/root/public_api"
],
"@spartacus/opf": ["../../integration-libs/opf/public_api"],
"@spartacus/opf/order": ["../../integration-libs/opf/order/public_api"],
"@spartacus/opf/payment/assets": [
"../../integration-libs/opf/payment/assets/public_api"
],
"@spartacus/opf/payment/core": [
"../../integration-libs/opf/payment/core/public_api"
],
"@spartacus/opf/payment": [
"../../integration-libs/opf/payment/public_api"
],
"@spartacus/opf/payment/opf-api": [
"../../integration-libs/opf/payment/opf-api/public_api"
],
"@spartacus/opf/payment/root": [
"../../integration-libs/opf/payment/root/public_api"
],
"@spartacus/opf/quick-buy/components": [
"../../integration-libs/opf/quick-buy/components/public_api"
],
"@spartacus/opf/quick-buy/core": [
"../../integration-libs/opf/quick-buy/core/public_api"
],
"@spartacus/opf/quick-buy": [
"../../integration-libs/opf/quick-buy/public_api"
],
"@spartacus/opf/quick-buy/opf-api": [
"../../integration-libs/opf/quick-buy/opf-api/public_api"
],
"@spartacus/opf/quick-buy/root": [
"../../integration-libs/opf/quick-buy/root/public_api"
],
"@spartacus/opps": ["../../integration-libs/opps/public_api"],
"@spartacus/opps/root": ["../../integration-libs/opps/root/public_api"],
"@spartacus/s4-service/assets": [
Expand Down
1 change: 1 addition & 0 deletions extra-webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ module.exports = {
'feature-libs/pickup-in-store'
),
'@spartacus/s4om': path.join(__dirname, 'integration-libs/s4om'),
'@spartacus/opf': path.join(__dirname, 'integration-libs/opf'),
'@spartacus/s4-service': path.join(__dirname, 'integration-libs/s4-service'),
'@spartacus/omf': path.join(__dirname, 'integration-libs/omf'),
},
Expand Down
79 changes: 79 additions & 0 deletions feature-libs/asm/tsconfig.schematics.json
Original file line number Diff line number Diff line change
Expand Up @@ -612,6 +612,85 @@
"@spartacus/omf": ["../../integration-libs/omf/public_api"],
"@spartacus/omf/order": ["../../integration-libs/omf/order/public_api"],
"@spartacus/omf/root": ["../../integration-libs/omf/root/public_api"],
"@spartacus/opf/base/components": [
"../../integration-libs/opf/base/components/public_api"
],
"@spartacus/opf/base/core": [
"../../integration-libs/opf/base/core/public_api"
],
"@spartacus/opf/base": ["../../integration-libs/opf/base/public_api"],
"@spartacus/opf/base/opf-api": [
"../../integration-libs/opf/base/opf-api/public_api"
],
"@spartacus/opf/base/root": [
"../../integration-libs/opf/base/root/public_api"
],
"@spartacus/opf/checkout/assets": [
"../../integration-libs/opf/checkout/assets/public_api"
],
"@spartacus/opf/checkout/components": [
"../../integration-libs/opf/checkout/components/public_api"
],
"@spartacus/opf/checkout": [
"../../integration-libs/opf/checkout/public_api"
],
"@spartacus/opf/checkout/root": [
"../../integration-libs/opf/checkout/root/public_api"
],
"@spartacus/opf/cta/components": [
"../../integration-libs/opf/cta/components/public_api"
],
"@spartacus/opf/cta/core": [
"../../integration-libs/opf/cta/core/public_api"
],
"@spartacus/opf/cta": ["../../integration-libs/opf/cta/public_api"],
"@spartacus/opf/cta/opf-api": [
"../../integration-libs/opf/cta/opf-api/public_api"
],
"@spartacus/opf/cta/root": [
"../../integration-libs/opf/cta/root/public_api"
],
"@spartacus/opf/global-functions/core": [
"../../integration-libs/opf/global-functions/core/public_api"
],
"@spartacus/opf/global-functions": [
"../../integration-libs/opf/global-functions/public_api"
],
"@spartacus/opf/global-functions/root": [
"../../integration-libs/opf/global-functions/root/public_api"
],
"@spartacus/opf": ["../../integration-libs/opf/public_api"],
"@spartacus/opf/order": ["../../integration-libs/opf/order/public_api"],
"@spartacus/opf/payment/assets": [
"../../integration-libs/opf/payment/assets/public_api"
],
"@spartacus/opf/payment/core": [
"../../integration-libs/opf/payment/core/public_api"
],
"@spartacus/opf/payment": [
"../../integration-libs/opf/payment/public_api"
],
"@spartacus/opf/payment/opf-api": [
"../../integration-libs/opf/payment/opf-api/public_api"
],
"@spartacus/opf/payment/root": [
"../../integration-libs/opf/payment/root/public_api"
],
"@spartacus/opf/quick-buy/components": [
"../../integration-libs/opf/quick-buy/components/public_api"
],
"@spartacus/opf/quick-buy/core": [
"../../integration-libs/opf/quick-buy/core/public_api"
],
"@spartacus/opf/quick-buy": [
"../../integration-libs/opf/quick-buy/public_api"
],
"@spartacus/opf/quick-buy/opf-api": [
"../../integration-libs/opf/quick-buy/opf-api/public_api"
],
"@spartacus/opf/quick-buy/root": [
"../../integration-libs/opf/quick-buy/root/public_api"
],
"@spartacus/opps": ["../../integration-libs/opps/public_api"],
"@spartacus/opps/root": ["../../integration-libs/opps/root/public_api"],
"@spartacus/s4-service/assets": [
Expand Down
3 changes: 3 additions & 0 deletions feature-libs/cart/base/core/cart-base-core.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import { NgModule } from '@angular/core';
import { HttpErrorHandler } from '@spartacus/core';
import { CartPersistenceModule } from './cart-persistence.module';
import { CartAccessCodeConnector, CartGuestUserConnector } from './connectors';
import { CartConnector } from './connectors/cart/cart.connector';
import { CartEntryConnector } from './connectors/entry/cart-entry.connector';
import { CartValidationConnector } from './connectors/validation/cart-validation.connector';
Expand All @@ -30,6 +31,8 @@ import { MultiCartStoreModule } from './store/multi-cart-store.module';
CartEntryConnector,
CartVoucherConnector,
CartValidationConnector,
CartAccessCodeConnector,
CartGuestUserConnector,
...facadeProviders,
{
provide: HttpErrorHandler,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*
* SPDX-FileCopyrightText: 2024 SAP Spartacus team <spartacus-team@sap.com>
*
* SPDX-License-Identifier: Apache-2.0
*/

import { Observable } from 'rxjs';

export abstract class CartAccessCodeAdapter {
/**
* Abstract method used to generate access code for a specific cart id.
*
* @param {string} userId
* @param {string} cartId
*
*/
abstract getCartAccessCode(
userId: string,
cartId: string
): Observable<string | undefined>;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { TestBed } from '@angular/core/testing';
import { of } from 'rxjs';
import { take } from 'rxjs/operators';
import { CartAccessCodeAdapter } from './cart-access-code.adapter';
import { CartAccessCodeConnector } from './cart-access-code.connector';
import createSpy = jasmine.createSpy;

class MockCartAccessCodeAdapter implements CartAccessCodeAdapter {
getCartAccessCode = createSpy().and.returnValue(of({}));
}

describe('CartAccessCodeConnector', () => {
let service: CartAccessCodeConnector;
let adapter: CartAccessCodeAdapter;

beforeEach(() => {
TestBed.configureTestingModule({
providers: [
CartAccessCodeConnector,
{
provide: CartAccessCodeAdapter,
useClass: MockCartAccessCodeAdapter,
},
],
});

service = TestBed.inject(CartAccessCodeConnector);
adapter = TestBed.inject(CartAccessCodeAdapter);
});

it('should be created', () => {
expect(service).toBeTruthy();
});

it('should call adapter', () => {
service.getCartAccessCode('user1', 'cart1').pipe(take(1)).subscribe();
expect(adapter.getCartAccessCode).toHaveBeenCalledWith('user1', 'cart1');
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*
* SPDX-FileCopyrightText: 2024 SAP Spartacus team <spartacus-team@sap.com>
*
* SPDX-License-Identifier: Apache-2.0
*/

import { Injectable, inject } from '@angular/core';
import { Observable } from 'rxjs';
import { CartAccessCodeAdapter } from './cart-access-code.adapter';

@Injectable()
export class CartAccessCodeConnector {
protected adapter = inject(CartAccessCodeAdapter);

public getCartAccessCode(
userId: string,
cartId: string
): Observable<string | undefined> {
return this.adapter.getCartAccessCode(userId, cartId);
}
}
12 changes: 12 additions & 0 deletions feature-libs/cart/base/core/connectors/access-code/converters.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/*
* SPDX-FileCopyrightText: 2024 SAP Spartacus team <spartacus-team@sap.com>
*
* SPDX-License-Identifier: Apache-2.0
*/

import { InjectionToken } from '@angular/core';
import { Converter } from '@spartacus/core';

export const CART_ACCESS_CODE_NORMALIZER = new InjectionToken<
Converter<any, string>
>('CartAccessCodeNormalizer');
9 changes: 9 additions & 0 deletions feature-libs/cart/base/core/connectors/access-code/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/*
* SPDX-FileCopyrightText: 2024 SAP Spartacus team <spartacus-team@sap.com>
*
* SPDX-License-Identifier: Apache-2.0
*/

export * from './cart-access-code.adapter';
export * from './cart-access-code.connector';
export * from './converters';
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* SPDX-FileCopyrightText: 2024 SAP Spartacus team <spartacus-team@sap.com>
*
* SPDX-License-Identifier: Apache-2.0
*/

import { CartGuestUser } from '@spartacus/cart/base/root';
import { Observable } from 'rxjs';

export abstract class CartGuestUserAdapter {
/**
* Abstract method used to create a guest user, and assigns the user to the cart.
*
* @param {string} userId
* @param {string} cartId
* @param {CartGuestUser} guestUserDetails
*
*/
abstract createCartGuestUser(
userId: string,
cartId: string,
guestUserDetails?: CartGuestUser
): Observable<CartGuestUser>;

/**
* Abstract method used to update a guest user, and assigns the user to the cart.
*
* @param {string} userId
* @param {string} cartId
* @param {CartGuestUser} guestUserDetails
*
*/
abstract updateCartGuestUser(
userId: string,
cartId: string,
guestUserDetails: CartGuestUser
): Observable<CartGuestUser>;
}
Loading

0 comments on commit 35bbcfe

Please sign in to comment.