Created the member.ts controller
This commit is contained in:
parent
c330d78fb3
commit
a176c484b9
79
src/controller/member.ts
Normal file
79
src/controller/member.ts
Normal file
@ -0,0 +1,79 @@
|
||||
import { checkProjectAccess } from "@controller/projects";
|
||||
import { IKeyRole } from "@models/AccessKey";
|
||||
import { encryptClearField } from "@utils/decryption";
|
||||
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({
|
||||
to: email,
|
||||
subject: `Einladung für ${projectName} - LicenseAPI`,
|
||||
text: `Hallo ${username}. Du wurdest in das Projekt ${projectName} eingeladen. Schau ins Dashboard um die Einladung zu akzeptieren`,
|
||||
});
|
||||
};
|
||||
|
||||
export const mapMember = async (member: IMember) => {
|
||||
const user = await getSimpleAccountObjectById(String(member.memberId));
|
||||
|
||||
return { user, role: member.role, accepted: member.accepted };
|
||||
};
|
||||
|
||||
export const listMembers = async (userId: string, projectId: string) => {
|
||||
const access = await checkProjectAccess(IKeyRole.VIEW)(userId, projectId);
|
||||
if ("code" in access) return access;
|
||||
|
||||
const members = await Member.find({ projectId: encryptClearField(String(access._id)) });
|
||||
|
||||
return await Promise.all(members.map(member => mapMember(member)));
|
||||
};
|
||||
|
||||
export const inviteMember = async (userId: string, projectId: string, configuration: { user: string, role: IKeyRole }) => {
|
||||
const access = await checkProjectAccess(IKeyRole.MANAGE)(userId, projectId);
|
||||
if ("code" in access) return access;
|
||||
|
||||
const account = await Account.findOne().or([{
|
||||
username: encryptClearField(configuration.user),
|
||||
allowInvites: true,
|
||||
}, { email: encryptClearField(configuration.user), verified: true, allowInvites: true }]);
|
||||
|
||||
if (account === null) return { code: 1002, message: "The provided account does not exist or disabled invites" };
|
||||
if (String(account._id) === userId) return { code: 1005, message: "You cannot invite yourself" };
|
||||
|
||||
const member = await Member.findOne({
|
||||
projectId: encryptClearField(String(access._id)),
|
||||
memberId: encryptClearField(String(account._id)),
|
||||
});
|
||||
if (member !== null) return { code: 1006, message: "This member is already part of this project" };
|
||||
|
||||
await Member.create({ memberId: account._id, role: configuration?.role, projectId: projectId });
|
||||
|
||||
await sendInvitationMail(account.email, account.username, access.name);
|
||||
};
|
||||
|
||||
export const updateMemberRole = async (userId: string, projectId: string, configuration: { userId: string, role: IKeyRole }) => {
|
||||
const access = await checkProjectAccess(IKeyRole.MANAGE)(userId, projectId);
|
||||
if ("code" in access) return access;
|
||||
|
||||
const member = await Member.findOne({
|
||||
projectId: encryptClearField(String(access._id)),
|
||||
memberId: encryptClearField(String(configuration.userId)),
|
||||
});
|
||||
if (member === null) return { code: 1002, message: "The provided member is not part of this project" };
|
||||
|
||||
await member.updateOne({ role: configuration.role });
|
||||
};
|
||||
|
||||
export const deleteMember = async (userId: string, projectId: string, configuration: { userId: string }) => {
|
||||
const access = await checkProjectAccess(IKeyRole.MANAGE)(userId, projectId);
|
||||
if ("code" in access) return access;
|
||||
|
||||
const member = await Member.findOne({
|
||||
projectId: encryptClearField(String(access._id)),
|
||||
memberId: encryptClearField(String(configuration.userId)),
|
||||
});
|
||||
if (member === null) return { code: 1002, message: "The provided member is not part of this project" };
|
||||
|
||||
await member.delete();
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user