From 53c7a05a66acfb8915ef4f2d64cd2e05c7b2a013 Mon Sep 17 00:00:00 2001
From: Ajay Nishad <ajay.nishad@eminds.ai>
Date: Wed, 6 Dec 2023 19:30:31 +0530
Subject: [PATCH] feat: add cancel api

---
 mappings/cancel.jsonata    |  4 ++++
 mappings/on_cancel.jsonata | 40 ++++++++++++++++++++++++++++++++++++++
 src/gcl/gcl.controller.ts  |  6 ++++++
 src/gcl/gcl.service.ts     |  9 +++++++++
 4 files changed, 59 insertions(+)
 create mode 100644 mappings/cancel.jsonata
 create mode 100644 mappings/on_cancel.jsonata

diff --git a/mappings/cancel.jsonata b/mappings/cancel.jsonata
new file mode 100644
index 0000000..1af3ce8
--- /dev/null
+++ b/mappings/cancel.jsonata
@@ -0,0 +1,4 @@
+{
+    "context": $context(context, $action),
+    "message": message
+}
diff --git a/mappings/on_cancel.jsonata b/mappings/on_cancel.jsonata
new file mode 100644
index 0000000..9018d19
--- /dev/null
+++ b/mappings/on_cancel.jsonata
@@ -0,0 +1,40 @@
+{
+    "data": $.responses.{
+        "context": context,
+        "message": {
+            "order": {
+                "type": message.order.type,
+                "provider": {
+                    "id": message.order.provider.id,
+                    "name": message.order.provider.descriptor.name,
+                    "short_desc": message.order.provider.descriptor.short_desc,
+                    "long_desc": message.order.provider.descriptor.long_desc,
+                    "rating": message.order.provider.rating,
+                    "images": message.order.provider.descriptor.images.{
+                        "url": url,
+                        "size_type": size_type
+                    },
+                    "media": message.order.provider.descriptor.media.{
+                        "url": url
+                    }
+                },
+                "items": message.order.items.{
+                    "id": id,
+                    "name": descriptor.name,
+                    "short_desc": descriptor.short_desc,
+                    "long_desc": descriptor.long_desc,
+                    "price": price,
+                    "rating": rating,
+                    "rateable": rateable,
+                    "time": time,
+                    "quantity": quantity
+                },
+                "fulfillments": message.order.fulfillments,
+                "quote": message.order.quote,
+                "billing": message.order.billing,
+                "payments": message.order.payments,
+                "cancellation_terms": message.order.cancellation_terms
+            }
+        }
+    }[]
+}
diff --git a/src/gcl/gcl.controller.ts b/src/gcl/gcl.controller.ts
index 6909ffd..6e66375 100644
--- a/src/gcl/gcl.controller.ts
+++ b/src/gcl/gcl.controller.ts
@@ -42,4 +42,10 @@ export class GCLController {
         const statusResult = await this.service.rating(body);
         return statusResult;
     }
+
+    @httpPost('cancel')
+    public async cancel(@requestBody() body: any): Promise<any> {
+        const statusResult = await this.service.cancel(body);
+        return statusResult;
+    }
 }
diff --git a/src/gcl/gcl.service.ts b/src/gcl/gcl.service.ts
index dab92b9..0131812 100644
--- a/src/gcl/gcl.service.ts
+++ b/src/gcl/gcl.service.ts
@@ -1,6 +1,7 @@
 import { inject, injectable } from "inversify";
 import { TLService } from "../tl/tl.service";
 import { PSClientService } from "../psclient/psclient.service";
+import data from '../../data.json';
 
 @injectable()
 export class GCLService {
@@ -58,4 +59,12 @@ export class GCLService {
 
         return response;
     }
+
+    async cancel(body: any) {
+        const payload = await this.tlService.transform(body, "cancel");
+        const psResponse = await this.psClientService.post(payload);
+        const response = await this.tlService.transform(psResponse, "on_cancel");
+
+        return response;
+    }
 }
-- 
GitLab