@grouparoo/core
Version:
The Grouparoo Core
185 lines (184 loc) • 7.1 kB
JavaScript
;
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;