From abee90c8497ffff49d97cc1b6130ba55f2d62f05 Mon Sep 17 00:00:00 2001 From: jurabek <jurabeka@pm.me> Date: Thu, 28 Dec 2023 15:28:12 +0100 Subject: [PATCH] Adding github workflow for checkout-api --- .github/workflows/checkout-api.yml | 35 +++++++++++++++++++ .../basket-api/dev/http_route_patch.yaml | 7 ---- .../basket-api/dev/kustomization.yaml | 2 -- .../checkout-api/src/checkout/checkout.ts | 4 +-- .../services/checkout-api/src/model.ts | 12 +++---- .../src/payment/paymentService.spec.ts | 4 +-- .../src/payment/paymentService.ts | 6 ++-- .../services/checkout-api/src/routes.ts | 4 +-- src/backend/services/checkout-api/version | 1 + 9 files changed, 51 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/checkout-api.yml delete mode 100644 k8s-kustomize/services/basket-api/dev/http_route_patch.yaml create mode 100644 src/backend/services/checkout-api/version diff --git a/.github/workflows/checkout-api.yml b/.github/workflows/checkout-api.yml new file mode 100644 index 000000000..68a0ea17a --- /dev/null +++ b/.github/workflows/checkout-api.yml @@ -0,0 +1,35 @@ + +name: checkout-api + +on: + push: + branches: + - develop + paths: + - 'src/backend/services/checkout-api/**' + - '.github/workflows/checkout-api.yml' + + pull_request: + branches: + - develop + paths: + - 'src/backend/services/checkout-api/**' + - '.github/workflows/checkout-api.yml' + + +jobs: + build-release: + uses: ./.github/workflows/build-release.yml + with: + service-name: checkout-api + secrets: inherit + + deploy: + if: github.ref == 'refs/heads/develop' + needs: + - build-release + uses: ./.github/workflows/deploy.yml + with: + service-name: checkout-api + version: ${{ needs.build-release.outputs.new-version }} + diff --git a/k8s-kustomize/services/basket-api/dev/http_route_patch.yaml b/k8s-kustomize/services/basket-api/dev/http_route_patch.yaml deleted file mode 100644 index 025240e52..000000000 --- a/k8s-kustomize/services/basket-api/dev/http_route_patch.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: gateway.networking.k8s.io/v1alpha2 -kind: HTTPRoute -metadata: - name: basket-api -spec: - hostnames: - - "api-dev.restaurant.io" \ No newline at end of file diff --git a/k8s-kustomize/services/basket-api/dev/kustomization.yaml b/k8s-kustomize/services/basket-api/dev/kustomization.yaml index 34b758ab0..98b75c00c 100644 --- a/k8s-kustomize/services/basket-api/dev/kustomization.yaml +++ b/k8s-kustomize/services/basket-api/dev/kustomization.yaml @@ -10,5 +10,3 @@ configMapGenerator: name: basket-api resources: - ../base -patches: -- path: http_route_patch.yaml diff --git a/src/backend/services/checkout-api/src/checkout/checkout.ts b/src/backend/services/checkout-api/src/checkout/checkout.ts index e259a1e5a..a0bce5304 100644 --- a/src/backend/services/checkout-api/src/checkout/checkout.ts +++ b/src/backend/services/checkout-api/src/checkout/checkout.ts @@ -1,12 +1,12 @@ import * as api from '@opentelemetry/api'; import { randomUUID } from "crypto"; -import { CartItem, CheckoutEvent, UserCheckout } from "../model"; +import { CartItem, CheckoutEvent, UserCheckoutReq } from "../model"; import getCustomerCartItems from "../cart/cartService"; import Payment from "../payment/paymentService"; import { logger } from "../logger"; import checkoutPublisher from "../messagging/publisher"; -export default async function Checkout(checkout: UserCheckout) { +export default async function Checkout(checkout: UserCheckoutReq) { const span = api.trace.getTracer('checkout-api').startSpan('checkout-api.Checkout'); await api.context.with(api.trace.setSpan(api.ROOT_CONTEXT, span), async () => { try { diff --git a/src/backend/services/checkout-api/src/model.ts b/src/backend/services/checkout-api/src/model.ts index 0da6a8bc7..46d4969d5 100644 --- a/src/backend/services/checkout-api/src/model.ts +++ b/src/backend/services/checkout-api/src/model.ts @@ -1,12 +1,12 @@ -export interface UserCheckout { - address: Address; - credit_card: CreditCard; +export interface UserCheckoutReq { + address: AddressReq; + credit_card: CreditCardReq; customer_id: string; email: string; user_currency: string; } -export interface Address { +export interface AddressReq { city: string; country: string; state: string; @@ -14,7 +14,7 @@ export interface Address { zip_code: number; } -export interface CreditCard { +export interface CreditCardReq { credit_card_cvv: number; credit_card_expiration_month: number; credit_card_expiration_year: number; @@ -34,6 +34,6 @@ export interface CartItem { export interface CheckoutEvent { transaction_id?: string; - user_checkout: UserCheckout; + user_checkout: UserCheckoutReq; customer_cart: CustomerCart } \ No newline at end of file diff --git a/src/backend/services/checkout-api/src/payment/paymentService.spec.ts b/src/backend/services/checkout-api/src/payment/paymentService.spec.ts index d16b02057..670caa3b6 100644 --- a/src/backend/services/checkout-api/src/payment/paymentService.spec.ts +++ b/src/backend/services/checkout-api/src/payment/paymentService.spec.ts @@ -2,7 +2,7 @@ import sinon from 'sinon'; import { expect } from "chai"; import type * as grpc from '@grpc/grpc-js' import { paymentService, pay } from "./paymentService"; -import { CartItem, UserCheckout } from "../model"; +import { CartItem, UserCheckoutReq } from "../model"; import { PaymentResponse } from '../gen/payment/PaymentResponse'; import { PaymentRequest } from '../gen/payment/PaymentRequest'; @@ -26,7 +26,7 @@ describe("pay", () => { { item_id: "item1", price: 9.99, quantity: 2 }, { item_id: "item2", price: 14.99, quantity: 1 }, ]; - const userCheckout: UserCheckout = { + const userCheckout: UserCheckoutReq = { address: { street_address: "123 Main St", city: "Anytown", diff --git a/src/backend/services/checkout-api/src/payment/paymentService.ts b/src/backend/services/checkout-api/src/payment/paymentService.ts index c840372c5..da6167d17 100644 --- a/src/backend/services/checkout-api/src/payment/paymentService.ts +++ b/src/backend/services/checkout-api/src/payment/paymentService.ts @@ -3,7 +3,7 @@ import * as grpc from '@grpc/grpc-js' import * as protoLoader from '@grpc/proto-loader' import { ProtoGrpcType } from '../gen/payments'; import path from 'path' -import { UserCheckout } from '../model'; +import { UserCheckoutReq } from '../model'; import { PaymentResponse } from '../gen/payment/PaymentResponse'; import { PaymentRequest } from '../gen/payment/PaymentRequest'; import { CartItem } from '../gen/cart/CartItem'; @@ -32,13 +32,13 @@ const asyncPayment = (req: PaymentRequest): Promise<PaymentResponse> => { export default function Payment( checkoutID: string, - userCheckout: UserCheckout, + userCheckout: UserCheckoutReq, cartItems: CartItem[], ): Promise<PaymentResponse> { return pay(cartItems, userCheckout, checkoutID); } -export function pay(cartItems: CartItem[], userCheckout: UserCheckout, orderId: string): Promise<PaymentResponse> { +export function pay(cartItems: CartItem[], userCheckout: UserCheckoutReq, orderId: string): Promise<PaymentResponse> { let amount = 0; for (const cartItem of cartItems) { const totalPrice = Number(cartItem.price) * Number(cartItem.quantity); diff --git a/src/backend/services/checkout-api/src/routes.ts b/src/backend/services/checkout-api/src/routes.ts index 458adf92c..d24f5e68c 100644 --- a/src/backend/services/checkout-api/src/routes.ts +++ b/src/backend/services/checkout-api/src/routes.ts @@ -1,10 +1,10 @@ import express, { Request, Response } from "express"; -import { UserCheckout } from "./model"; +import { UserCheckoutReq } from "./model"; import Checkout from "./checkout/checkout"; const router = express.Router(); -router.post('/api/v1/checkout', async (req: Request<{}, {}, UserCheckout>, res: Response) => { +router.post('/api/v1/checkout', async (req: Request<{}, {}, UserCheckoutReq>, res: Response) => { try { await Checkout(req.body); res.send('Checkout OK'); diff --git a/src/backend/services/checkout-api/version b/src/backend/services/checkout-api/version new file mode 100644 index 000000000..8acdd82b7 --- /dev/null +++ b/src/backend/services/checkout-api/version @@ -0,0 +1 @@ +0.0.1