summaryrefslogtreecommitdiff
path: root/src/frontend/gateways/rpc
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/gateways/rpc')
-rw-r--r--src/frontend/gateways/rpc/Ad.gateway.ts19
-rw-r--r--src/frontend/gateways/rpc/Cart.gateway.ts29
-rw-r--r--src/frontend/gateways/rpc/Checkout.gateway.ts19
-rw-r--r--src/frontend/gateways/rpc/Currency.gateway.ts24
-rw-r--r--src/frontend/gateways/rpc/ProductCatalog.gateway.ts24
-rw-r--r--src/frontend/gateways/rpc/Recommendations.gateway.ts21
6 files changed, 136 insertions, 0 deletions
diff --git a/src/frontend/gateways/rpc/Ad.gateway.ts b/src/frontend/gateways/rpc/Ad.gateway.ts
new file mode 100644
index 0000000..1fd7244
--- /dev/null
+++ b/src/frontend/gateways/rpc/Ad.gateway.ts
@@ -0,0 +1,19 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+import { ChannelCredentials } from '@grpc/grpc-js';
+import { AdResponse, AdServiceClient } from '../../protos/demo';
+
+const { AD_ADDR = '' } = process.env;
+
+const client = new AdServiceClient(AD_ADDR, ChannelCredentials.createInsecure());
+
+const AdGateway = () => ({
+ listAds(contextKeys: string[]) {
+ return new Promise<AdResponse>((resolve, reject) =>
+ client.getAds({ contextKeys: contextKeys }, (error, response) => (error ? reject(error) : resolve(response)))
+ );
+ },
+});
+
+export default AdGateway();
diff --git a/src/frontend/gateways/rpc/Cart.gateway.ts b/src/frontend/gateways/rpc/Cart.gateway.ts
new file mode 100644
index 0000000..25dfc87
--- /dev/null
+++ b/src/frontend/gateways/rpc/Cart.gateway.ts
@@ -0,0 +1,29 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+import { ChannelCredentials } from '@grpc/grpc-js';
+import { Cart, CartItem, CartServiceClient, Empty } from '../../protos/demo';
+
+const { CART_ADDR = '' } = process.env;
+
+const client = new CartServiceClient(CART_ADDR, ChannelCredentials.createInsecure());
+
+const CartGateway = () => ({
+ getCart(userId: string) {
+ return new Promise<Cart>((resolve, reject) =>
+ client.getCart({ userId }, (error, response) => (error ? reject(error) : resolve(response)))
+ );
+ },
+ addItem(userId: string, item: CartItem) {
+ return new Promise<Empty>((resolve, reject) =>
+ client.addItem({ userId, item }, (error, response) => (error ? reject(error) : resolve(response)))
+ );
+ },
+ emptyCart(userId: string) {
+ return new Promise<Empty>((resolve, reject) =>
+ client.emptyCart({ userId }, (error, response) => (error ? reject(error) : resolve(response)))
+ );
+ },
+});
+
+export default CartGateway();
diff --git a/src/frontend/gateways/rpc/Checkout.gateway.ts b/src/frontend/gateways/rpc/Checkout.gateway.ts
new file mode 100644
index 0000000..3d54f9e
--- /dev/null
+++ b/src/frontend/gateways/rpc/Checkout.gateway.ts
@@ -0,0 +1,19 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+import { ChannelCredentials } from '@grpc/grpc-js';
+import { CheckoutServiceClient, PlaceOrderRequest, PlaceOrderResponse } from '../../protos/demo';
+
+const { CHECKOUT_ADDR = '' } = process.env;
+
+const client = new CheckoutServiceClient(CHECKOUT_ADDR, ChannelCredentials.createInsecure());
+
+const CheckoutGateway = () => ({
+ placeOrder(order: PlaceOrderRequest) {
+ return new Promise<PlaceOrderResponse>((resolve, reject) =>
+ client.placeOrder(order, (error, response) => (error ? reject(error) : resolve(response)))
+ );
+ },
+});
+
+export default CheckoutGateway();
diff --git a/src/frontend/gateways/rpc/Currency.gateway.ts b/src/frontend/gateways/rpc/Currency.gateway.ts
new file mode 100644
index 0000000..ac25719
--- /dev/null
+++ b/src/frontend/gateways/rpc/Currency.gateway.ts
@@ -0,0 +1,24 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+import { ChannelCredentials } from '@grpc/grpc-js';
+import { GetSupportedCurrenciesResponse, CurrencyServiceClient, Money } from '../../protos/demo';
+
+const { CURRENCY_ADDR = '' } = process.env;
+
+const client = new CurrencyServiceClient(CURRENCY_ADDR, ChannelCredentials.createInsecure());
+
+const CurrencyGateway = () => ({
+ convert(from: Money, toCode: string) {
+ return new Promise<Money>((resolve, reject) =>
+ client.convert({ from, toCode }, (error, response) => (error ? reject(error) : resolve(response)))
+ );
+ },
+ getSupportedCurrencies() {
+ return new Promise<GetSupportedCurrenciesResponse>((resolve, reject) =>
+ client.getSupportedCurrencies({}, (error, response) => (error ? reject(error) : resolve(response)))
+ );
+ },
+});
+
+export default CurrencyGateway();
diff --git a/src/frontend/gateways/rpc/ProductCatalog.gateway.ts b/src/frontend/gateways/rpc/ProductCatalog.gateway.ts
new file mode 100644
index 0000000..18d8305
--- /dev/null
+++ b/src/frontend/gateways/rpc/ProductCatalog.gateway.ts
@@ -0,0 +1,24 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+import { ChannelCredentials } from '@grpc/grpc-js';
+import { ListProductsResponse, Product, ProductCatalogServiceClient } from '../../protos/demo';
+
+const { PRODUCT_CATALOG_ADDR = '' } = process.env;
+
+const client = new ProductCatalogServiceClient(PRODUCT_CATALOG_ADDR, ChannelCredentials.createInsecure());
+
+const ProductCatalogGateway = () => ({
+ listProducts() {
+ return new Promise<ListProductsResponse>((resolve, reject) =>
+ client.listProducts({}, (error, response) => (error ? reject(error) : resolve(response)))
+ );
+ },
+ getProduct(id: string) {
+ return new Promise<Product>((resolve, reject) =>
+ client.getProduct({ id }, (error, response) => (error ? reject(error) : resolve(response)))
+ );
+ },
+});
+
+export default ProductCatalogGateway();
diff --git a/src/frontend/gateways/rpc/Recommendations.gateway.ts b/src/frontend/gateways/rpc/Recommendations.gateway.ts
new file mode 100644
index 0000000..c58a470
--- /dev/null
+++ b/src/frontend/gateways/rpc/Recommendations.gateway.ts
@@ -0,0 +1,21 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+import { ChannelCredentials } from '@grpc/grpc-js';
+import { ListRecommendationsResponse, RecommendationServiceClient } from '../../protos/demo';
+
+const { RECOMMENDATION_ADDR = '' } = process.env;
+
+const client = new RecommendationServiceClient(RECOMMENDATION_ADDR, ChannelCredentials.createInsecure());
+
+const RecommendationsGateway = () => ({
+ listRecommendations(userId: string, productIds: string[]) {
+ return new Promise<ListRecommendationsResponse>((resolve, reject) =>
+ client.listRecommendations({ userId, productIds }, (error, response) =>
+ error ? reject(error) : resolve(response)
+ )
+ );
+ },
+});
+
+export default RecommendationsGateway();