UNPKG

@grouparoo/core

Version:
185 lines (184 loc) 7.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TeamDestroy = exports.TeamView = exports.TeamEdit = exports.TeamCreate = exports.TeamsList = exports.TeamInitialize = void 0; const sequelize_1 = __importDefault(require("sequelize")); const authenticatedAction_1 = require("../classes/actions/authenticatedAction"); const clsAction_1 = require("../classes/actions/clsAction"); const Team_1 = require("../models/Team"); const TeamMember_1 = require("../models/TeamMember"); const Setting_1 = require("../models/Setting"); const grouparooSubscription_1 = require("../modules/grouparooSubscription"); const apiData_1 = require("../modules/apiData"); class TeamInitialize extends clsAction_1.CLSAction { constructor() { super(...arguments); this.name = "team:initialize"; this.description = "create the first team with the first team member"; this.permission = { topic: "team", mode: "write" }; this.outputExample = {}; this.inputs = { firstName: { required: true }, lastName: { required: true }, password: { required: true }, email: { required: true }, companyName: { required: false }, subscribed: { required: false, default: true, formatter: apiData_1.APIData.ensureBoolean, }, }; } async runWithinTransaction({ params, }) { let team; let teamMember; if ((await Team_1.Team.count()) > 0) { throw new Error("an administration team already exists, please sign in"); } team = await Team_1.Team.create({ name: "Administrators", locked: "team:initialize", permissionAllRead: true, permissionAllWrite: true, }); teamMember = await TeamMember_1.TeamMember.create({ teamId: team.id, email: params.email, firstName: params.firstName, lastName: params.lastName, }); await teamMember.updatePassword(params.password); await (0, grouparooSubscription_1.GrouparooSubscription)({ teamMember, subscribed: params.subscribed }); if (params.companyName) { const clusterNameSetting = await Setting_1.Setting.findOne({ where: { pluginName: "core", key: "cluster-name" }, }); if (!clusterNameSetting.locked) { await clusterNameSetting.update({ value: params.companyName }); } } return { team: await team.apiData(), teamMember: await teamMember.apiData(), }; } } exports.TeamInitialize = TeamInitialize; class TeamsList extends authenticatedAction_1.AuthenticatedAction { constructor() { super(...arguments); this.name = "teams:list"; this.description = "list all the teams"; this.outputExample = {}; this.permission = { topic: "team", mode: "read" }; } async runWithinTransaction() { const teams = await Team_1.Team.findAll(); return { teams: await Promise.all(teams.map((team) => team.apiData())), }; } } exports.TeamsList = TeamsList; class TeamCreate extends authenticatedAction_1.AuthenticatedAction { constructor() { super(...arguments); this.name = "team:create"; this.description = "create a team"; this.outputExample = {}; this.permission = { topic: "team", mode: "write" }; this.inputs = { name: { required: true }, permissionAllRead: { required: false, default: true }, permissionAllWrite: { required: false, default: false }, permissions: { required: false, formatter: apiData_1.APIData.ensureArray }, }; } async runWithinTransaction({ params }) { const team = new Team_1.Team(params); await team.save(); if (params.permissions) await team.setPermissions(params.permissions); return { team: await team.apiData() }; } } exports.TeamCreate = TeamCreate; class TeamEdit extends authenticatedAction_1.AuthenticatedAction { constructor() { super(...arguments); this.name = "team:edit"; this.description = "edit a team"; this.outputExample = {}; this.permission = { topic: "team", mode: "write" }; this.inputs = { id: { required: true }, name: { required: false }, permissionAllRead: { required: false }, permissionAllWrite: { required: false }, disabledPermissionAllRead: { required: false }, disabledPermissionAllWrite: { required: false }, permissions: { required: false, formatter: apiData_1.APIData.ensureArray }, }; } async runWithinTransaction({ params }) { const team = await Team_1.Team.findById(params.id); const updateParams = Object.assign({}, params); if (params.disabledPermissionAllRead) updateParams.permissionAllRead = null; if (params.disabledPermissionAllWrite) { updateParams.permissionAllWrite = null; } await team.update(updateParams); if (params.permissions) await team.setPermissions(params.permissions); return { team: await team.apiData() }; } } exports.TeamEdit = TeamEdit; class TeamView extends authenticatedAction_1.AuthenticatedAction { constructor() { super(...arguments); this.name = "team:view"; this.description = "view a team and members"; this.outputExample = {}; this.permission = { topic: "team", mode: "read" }; this.inputs = { id: { required: true }, }; } async runWithinTransaction({ params }) { const team = await Team_1.Team.findOne({ where: { id: params.id }, include: [{ model: TeamMember_1.TeamMember }], order: [[sequelize_1.default.literal(`"teamMembers.email"`), "desc"]], }); if (!team) throw new Error("team not found"); return { team: await team.apiData(), teamMembers: await Promise.all(team.teamMembers.map((mem) => mem.apiData())), }; } } exports.TeamView = TeamView; class TeamDestroy extends authenticatedAction_1.AuthenticatedAction { constructor() { super(...arguments); this.name = "team:destroy"; this.description = "destroy a team"; this.outputExample = {}; this.permission = { topic: "team", mode: "write" }; this.inputs = { id: { required: true }, }; } async runWithinTransaction({ params }) { const team = await Team_1.Team.findById(params.id); await team.destroy(); return { success: true }; } } exports.TeamDestroy = TeamDestroy;