From 82e03978b89938219958032efb1448cc76baa181 Mon Sep 17 00:00:00 2001 From: Saumit Date: Sat, 27 Sep 2025 02:14:26 +0530 Subject: Initial snapshot - OpenTelemetry demo 2.1.3 -f --- src/frontend/services/ProductCatalog.service.ts | 40 +++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/frontend/services/ProductCatalog.service.ts (limited to 'src/frontend/services/ProductCatalog.service.ts') 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(); -- cgit v1.2.3