From 6308af85f03f7f4203690feb4815ddab3941bce5 Mon Sep 17 00:00:00 2001
From: Matt Kirby <MattJKirby@outlook.com>
Date: Sat, 15 Apr 2023 01:28:25 +0100
Subject: [PATCH] Added request datastore

---
 .../src/Datastores/RequestDataStore.ts        | 56 +++++++++++++++++++
 1 file changed, 56 insertions(+)
 create mode 100644 backend-services/friend-service/src/Datastores/RequestDataStore.ts

diff --git a/backend-services/friend-service/src/Datastores/RequestDataStore.ts b/backend-services/friend-service/src/Datastores/RequestDataStore.ts
new file mode 100644
index 00000000..839e9ddf
--- /dev/null
+++ b/backend-services/friend-service/src/Datastores/RequestDataStore.ts
@@ -0,0 +1,56 @@
+import RequestSchema from '../Database/Schemas/RequestSchema';
+import { FriendRequest } from '../Types/Request';
+import { DataStore } from './DataStore';
+
+/**
+ * Contains actions pertaining to storing and accessing Requests
+ */
+class RequestDataStore extends DataStore<any>{
+
+  public newRequest = async (sourceUserId: string, targetUserId: string): Promise<FriendRequest> => {
+    return await this.Model.create({
+      SourceUser: sourceUserId,
+      TargetUser: targetUserId
+    });
+  };
+
+  /**
+   * Store action for getting requests for a user
+   * @param itemCount 
+   * @returns 
+   */
+  public getRequests = async (userId: string): Promise<FriendRequest[]> => {
+    return await this.Model.find({TargetUser: userId}).sort({$natural: -1})
+  }
+
+  /**
+   * Find and delete a request if it exists.
+   * @param requestId 
+   * @returns 
+   */
+  public handleRequestById = async (requestId: string): Promise<FriendRequest> => {
+    const result = await this.Model.findByIdAndDelete(requestId)
+
+    if (result === null){
+      throw new Error ("Invalid request id!")
+    }
+    return result;
+  }
+
+  /**
+   * Get a request by its id
+   * @param requestId 
+   * @returns 
+   */
+  public GetRequestById = async (requestId: string): Promise<FriendRequest> => {
+    const result = await this.Model.findById(requestId)
+
+    if(result === null){
+      throw new Error ("Invalid request id!")
+    }
+    
+    return result;
+  }
+}
+
+export default new RequestDataStore('Request', RequestSchema)
\ No newline at end of file
-- 
GitLab