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