@grouparoo/core
Version:
The Grouparoo Core
143 lines (142 loc) • 5.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TeamMemberDestroy = exports.TeamMemberEdit = exports.TeamMemberView = exports.TeamMemberCreate = exports.TeamMembersList = void 0;
const authenticatedAction_1 = require("../classes/actions/authenticatedAction");
const Team_1 = require("../models/Team");
const TeamMember_1 = require("../models/TeamMember");
const apiData_1 = require("../modules/apiData");
const grouparooSubscription_1 = require("../modules/grouparooSubscription");
class TeamMembersList extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "teamMembers:list";
this.description = "view all the members of a team";
this.outputExample = {};
this.permission = { topic: "team", mode: "read" };
this.inputs = {
id: { required: false },
teamId: { required: false },
};
}
async runWithinTransaction({ params, }) {
const where = {};
if (params.id)
where["teamId"] = params.id;
if (params.teamId)
where["teamId"] = params.teamId;
const teamMembers = await TeamMember_1.TeamMember.findAll({
where,
order: [["email", "asc"]],
});
return {
teamMembers: await Promise.all(teamMembers.map((tem) => tem.apiData())),
};
}
}
exports.TeamMembersList = TeamMembersList;
class TeamMemberCreate extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "teamMember:create";
this.description = "create a team member";
this.outputExample = {};
this.permission = { topic: "team", mode: "write" };
this.inputs = {
teamId: { required: true },
firstName: { required: true },
lastName: { required: true },
password: { required: true },
email: { required: true },
subscribed: {
required: false,
default: true,
formatter: apiData_1.APIData.ensureBoolean,
},
};
}
async runWithinTransaction({ params, }) {
const team = await Team_1.Team.findById(params.teamId);
const teamMember = new TeamMember_1.TeamMember({
firstName: params.firstName,
lastName: params.lastName,
email: params.email,
teamId: team.id,
});
await teamMember.save();
await teamMember.updatePassword(params.password);
await (0, grouparooSubscription_1.GrouparooSubscription)({ teamMember, subscribed: params.subscribed });
return { teamMember: await teamMember.apiData() };
}
}
exports.TeamMemberCreate = TeamMemberCreate;
class TeamMemberView extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "teamMember:view";
this.description = "view a team member";
this.outputExample = {};
this.permission = { topic: "team", mode: "read" };
this.inputs = {
id: { required: true },
};
}
async runWithinTransaction({ params, }) {
const teamMember = await TeamMember_1.TeamMember.findOne({
where: { id: params.id },
include: [Team_1.Team],
});
if (!teamMember)
throw new Error("team member not found");
return {
teamMember: await teamMember.apiData(),
team: await teamMember.team.apiData(),
};
}
}
exports.TeamMemberView = TeamMemberView;
class TeamMemberEdit extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "teamMember:edit";
this.description = "edit a team member";
this.outputExample = {};
this.permission = { topic: "team", mode: "write" };
this.inputs = {
id: { required: true },
firstName: { required: false },
lastName: { required: false },
password: { required: false },
email: { required: false },
teamId: { required: false },
};
}
async runWithinTransaction({ params, }) {
const teamMember = await TeamMember_1.TeamMember.findById(params.id);
await teamMember.update(params);
if (params.password)
await teamMember.updatePassword(params.password);
return { teamMember: await teamMember.apiData() };
}
}
exports.TeamMemberEdit = TeamMemberEdit;
class TeamMemberDestroy extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "teamMember:destroy";
this.description = "destroy a team member";
this.outputExample = {};
this.permission = { topic: "team", mode: "write" };
this.inputs = {
id: { required: true },
};
}
async runWithinTransaction({ params, session: { teamMember: myself }, }) {
const teamMember = await TeamMember_1.TeamMember.findById(params.id);
if (myself.id === teamMember.id) {
throw new Error("you cannot delete yourself");
}
await teamMember.destroy();
return { success: true };
}
}
exports.TeamMemberDestroy = TeamMemberDestroy;