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