diff options
| author | Saumit <justsaumit@protonmail.com> | 2025-09-27 02:14:26 +0530 |
|---|---|---|
| committer | Saumit <justsaumit@protonmail.com> | 2025-09-27 02:14:26 +0530 |
| commit | 82e03978b89938219958032efb1448cc76baa181 (patch) | |
| tree | 626f3e54d52ecd49be0ed3bee30abacc0453d081 /src/frontend/services/ProductCatalog.service.ts | |
Initial snapshot - OpenTelemetry demo 2.1.3 -f
Diffstat (limited to 'src/frontend/services/ProductCatalog.service.ts')
| -rw-r--r-- | src/frontend/services/ProductCatalog.service.ts | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/frontend/services/ProductCatalog.service.ts b/src/frontend/services/ProductCatalog.service.ts new file mode 100644 index 0000000..9854531 --- /dev/null +++ b/src/frontend/services/ProductCatalog.service.ts @@ -0,0 +1,40 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +import ProductCatalogGateway from '../gateways/rpc/ProductCatalog.gateway'; +import CurrencyGateway from '../gateways/rpc/Currency.gateway'; +import { Money } from '../protos/demo'; + +const defaultCurrencyCode = 'USD'; + +const ProductCatalogService = () => ({ + async getProductPrice(price: Money, currencyCode: string) { + return !!currencyCode && currencyCode !== defaultCurrencyCode + ? await CurrencyGateway.convert(price, currencyCode) + : price; + }, + async listProducts(currencyCode = 'USD') { + const { products: productList } = await ProductCatalogGateway.listProducts(); + + return Promise.all( + productList.map(async product => { + const priceUsd = await this.getProductPrice(product.priceUsd!, currencyCode); + + return { + ...product, + priceUsd, + }; + }) + ); + }, + async getProduct(id: string, currencyCode = 'USD') { + const product = await ProductCatalogGateway.getProduct(id); + + return { + ...product, + priceUsd: await this.getProductPrice(product.priceUsd!, currencyCode), + }; + }, +}); + +export default ProductCatalogService(); |
