From 0878bdc7617a4738862269cade2a06bb10feaae5 Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Mon, 22 Jul 2024 22:12:14 +0200 Subject: [PATCH] Add invitation methods to member.ts controller --- src/controller/member.ts | 45 ++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/src/controller/member.ts b/src/controller/member.ts index a10ed18..f5958c4 100644 --- a/src/controller/member.ts +++ b/src/controller/member.ts @@ -1,9 +1,9 @@ -import { checkProjectAccess } from "@controller/projects"; -import { IKeyRole } from "@models/AccessKey"; -import { IMember, Member } from "@models/Member"; -import { Account } from "@models/Account"; -import { sendMail } from "@utils/email"; -import { getSimpleAccountObjectById } from "@controller/account"; +import {checkProjectAccess, getProjectUnsafe} from "@controller/projects"; +import {IKeyRole} from "@models/AccessKey"; +import {IMember, Member} from "@models/Member"; +import {Account} from "@models/Account"; +import {sendMail} from "@utils/email"; +import {getSimpleAccountObjectById} from "@controller/account"; export const sendInvitationMail = async (email: string, username: string, projectName: string) => { sendMail({ @@ -76,3 +76,36 @@ export const deleteMember = async (userId: string, projectId: string, configurat await member.deleteOne(); }; + +export const listInvitations = async (userId: string) => { + const account = await Account.findById(userId); + if (account === null) return { code: 1002, message: "The provided account does not exist" }; + + const members = await Member.find({ memberId: userId, accepted: false }); + + return await Promise.all(members.map(async member => { + const project = await getProjectUnsafe(String(member.projectId)); + return {id: project?._id, name: project?.name, role: member.role}; + })); +}; + +export const acceptInvitation = async (userId: string, projectId: string) => { + const member = await Member.findOne({ memberId: userId, projectId, accepted: false }); + if (member === null) return { code: 1002, message: "The provided invitation does not exist" }; + + await member.updateOne({ accepted: true }); +} + +export const declineInvitation = async (userId: string, projectId: string) => { + const member = await Member.findOne({ memberId: userId, projectId, accepted: false }); + if (member === null) return { code: 1002, message: "The provided invitation does not exist" }; + + await member.deleteOne(); +} + +export const leaveProject = async (userId: string, projectId: string) => { + const member = await Member.findOne({ memberId: userId, projectId, accepted: true }); + if (member === null) return { code: 1002, message: "The provided member is not part of this project" }; + + await member.deleteOne(); +} \ No newline at end of file