UNPKG

@grouparoo/core

Version:
143 lines (142 loc) 5.4 kB
"use strict"; 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;