From 8ec90dd3f3b0f52556c319674fdbf84407671179 Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Mon, 22 Jul 2024 22:12:27 +0200 Subject: [PATCH] Add invitation methods to projects.ts controller --- src/controller/projects.ts | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/controller/projects.ts b/src/controller/projects.ts index 7ed3a29..b071d9f 100644 --- a/src/controller/projects.ts +++ b/src/controller/projects.ts @@ -1,4 +1,4 @@ -import { IProject, Project } from "@models/Project"; +import {IMemberProject, IProject, Project} from "@models/Project"; import { Types } from "mongoose"; import crypto from "crypto"; import { AccessKey, IKeyRole } from "@models/AccessKey"; @@ -28,18 +28,23 @@ export const checkProjectAccess = (requiredPermission: IKeyRole) => async (userI return { code: 5009, message: "The provided project id does not exist" }; }; -const projectMapper = (project: IProject) => ({ - id: project._id, name: project.name, validationKey: project.validationKey, - defaults: project.defaults, -}); +const projectMapper = (project: IProject | IMemberProject) => { + const baseProject = {id: project._id, name: project.name, validationKey: project.validationKey, + defaults: project.defaults,}; + if ('role' in project) return { ...baseProject, role: project.role }; + + return baseProject; +}; export const listProjects = async (userId?: string) => { - const projects = await Project.find({ creatorId: userId || "" }); + const projects: Array = await Project.find({ creatorId: userId || "" }); const memberProjects = await Member.find({ memberId: userId || "", accepted: true }); - for (const project of memberProjects) { - const foundProject = await Project.findById(project.projectId); - if (foundProject !== null) projects.push(foundProject); + for (const memberProject of memberProjects) { + const foundProject = await Project.findById(memberProject.projectId); + if (foundProject !== null) { + projects.push({ ...foundProject.toObject(), role: memberProject.role }); + } } return projects.map(project => projectMapper(project)); @@ -52,6 +57,13 @@ export const getProject = async (projectId: string, userId: string) => { return projectMapper(project); }; +export const getProjectUnsafe = async (projectId: string): Promise => { + const project = await Project.findById(projectId); + if (project === null) return null; + + return project; +} + export const createProject = async (name: string, userId: string) => { await Project.create({ name, creatorId: userId });