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 0000000000000000000000000000000000000000..839e9ddf898a26c4099fd07b600ef50048308b2b --- /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