From d3c84f28badc9c2946b812f9c7de1e4ff7c8f487 Mon Sep 17 00:00:00 2001
From: Matt Kirby <MattJKirby@outlook.com>
Date: Sat, 15 Apr 2023 01:29:08 +0100
Subject: [PATCH] Added request manager class

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

diff --git a/backend-services/friend-service/src/Requests/RequestManager.ts b/backend-services/friend-service/src/Requests/RequestManager.ts
new file mode 100644
index 00000000..2fa43fb4
--- /dev/null
+++ b/backend-services/friend-service/src/Requests/RequestManager.ts
@@ -0,0 +1,56 @@
+import FriendDataStore from "../Datastores/FriendDataStore";
+import RequestDataStore from "../Datastores/RequestDataStore"
+import { FriendManager } from "../Friends/FriendManager";
+import { Friend } from "../Types/Friend";
+import { FriendRequest } from "../Types/Request";
+
+/**
+ * Handles all friend request functionality
+ */
+export class RequestManager {
+
+  private friendManager: FriendManager
+
+  constructor(friendManager: FriendManager){
+    this.friendManager = friendManager;
+  }
+
+  /**
+   * Method to create a new friend request
+   * @param sourceId 
+   * @param targetId 
+   * @returns 
+   */
+  public NewRequest = async (sourceId: string, targetId: string):Promise<FriendRequest> => {
+    if(await RequestDataStore.GetItem({SourceUser: sourceId, TargetUser: targetId}) !== null || await RequestDataStore.GetItem({SourceUser: targetId, TargetUser: sourceId}) !== null){
+      throw new Error("Request already exists!");
+    }
+
+    if(await FriendDataStore.GetFriendByUsers(sourceId, targetId) !== null){
+      throw new Error("Users are already friends!");
+    }
+    return await RequestDataStore.newRequest(sourceId, targetId);
+  }
+
+  /**
+   * 
+   * @param targetId Method to get user requests
+   * @returns 
+   */
+  public GetRequests = async (targetId: string):Promise<FriendRequest[]> => {
+    return await RequestDataStore.getRequests(targetId)
+  }
+
+  public AcceptRequest = async (requestId: string): Promise<Friend> => {
+    const request = await RequestDataStore.handleRequestById(requestId)
+    return await this.friendManager.AddFriend(request.SourceUser, request.TargetUser)
+  }
+
+  public RejectRequest = async (requestId: string): Promise<FriendRequest> => {
+    return await RequestDataStore.handleRequestById(requestId);
+  }
+
+  public GetSingleRequest = async (requestId: string): Promise<FriendRequest> => {
+    return await RequestDataStore.GetRequestById(requestId);
+  }
+}
\ No newline at end of file
-- 
GitLab