Add invitation methods to projects.ts controller

This commit is contained in:
Mathias Wagner
2024-07-22 22:12:27 +02:00
parent 0878bdc761
commit 8ec90dd3f3

View File

@ -1,4 +1,4 @@
import { IProject, Project } from "@models/Project"; import {IMemberProject, IProject, Project} from "@models/Project";
import { Types } from "mongoose"; import { Types } from "mongoose";
import crypto from "crypto"; import crypto from "crypto";
import { AccessKey, IKeyRole } from "@models/AccessKey"; 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" }; return { code: 5009, message: "The provided project id does not exist" };
}; };
const projectMapper = (project: IProject) => ({ const projectMapper = (project: IProject | IMemberProject) => {
id: project._id, name: project.name, validationKey: project.validationKey, const baseProject = {id: project._id, name: project.name, validationKey: project.validationKey,
defaults: project.defaults, defaults: project.defaults,};
}); if ('role' in project) return { ...baseProject, role: project.role };
return baseProject;
};
export const listProjects = async (userId?: string) => { export const listProjects = async (userId?: string) => {
const projects = await Project.find({ creatorId: userId || "" }); const projects: Array<IProject | IMemberProject> = await Project.find({ creatorId: userId || "" });
const memberProjects = await Member.find({ memberId: userId || "", accepted: true }); const memberProjects = await Member.find({ memberId: userId || "", accepted: true });
for (const project of memberProjects) { for (const memberProject of memberProjects) {
const foundProject = await Project.findById(project.projectId); const foundProject = await Project.findById(memberProject.projectId);
if (foundProject !== null) projects.push(foundProject); if (foundProject !== null) {
projects.push({ ...foundProject.toObject(), role: memberProject.role });
}
} }
return projects.map(project => projectMapper(project)); return projects.map(project => projectMapper(project));
@ -52,6 +57,13 @@ export const getProject = async (projectId: string, userId: string) => {
return projectMapper(project); return projectMapper(project);
}; };
export const getProjectUnsafe = async (projectId: string): Promise<IProject | null> => {
const project = await Project.findById(projectId);
if (project === null) return null;
return project;
}
export const createProject = async (name: string, userId: string) => { export const createProject = async (name: string, userId: string) => {
await Project.create({ name, creatorId: userId }); await Project.create({ name, creatorId: userId });