@grouparoo/core
Version:
The Grouparoo Core
108 lines (89 loc) • 2.31 kB
text/typescript
import {
Table,
Column,
AllowNull,
IsEmail,
BelongsTo,
BeforeSave,
ForeignKey,
IsLowercase,
BeforeValidate,
BeforeDestroy,
AfterCreate,
} from "sequelize-typescript";
import { Team } from "./Team";
import { TeamMemberOps } from "../modules/ops/teamMember";
import { LockableHelper } from "../modules/lockableHelper";
import { APIData } from "../modules/apiData";
import { CLS } from "../modules/cls";
import { CommonModel } from "../classes/commonModel";
({ tableName: "teamMembers", paranoid: false })
export class TeamMember extends CommonModel<TeamMember> {
idPrefix() {
return "tem";
}
(false)
(() => Team)
teamId: string;
locked: string;
(false)
firstName: string;
(false)
lastName: string;
(false)
email: string;
passwordHash: string;
lastLoginAt: Date;
(() => Team)
team: Team;
async apiData() {
return {
id: this.id,
teamId: this.teamId,
firstName: this.firstName,
lastName: this.lastName,
email: this.email,
locked: this.locked,
lastLoginAt: this.lastLoginAt,
createdAt: APIData.formatDate(this.createdAt),
updatedAt: APIData.formatDate(this.updatedAt),
};
}
async updatePassword(password: string) {
return TeamMemberOps.updatePassword(this, password);
}
async checkPassword(password: string) {
return TeamMemberOps.checkPassword(this, password);
}
// --- Class Methods --- //
static lowercaseEmail(instance: TeamMember) {
if (instance.email) instance.email = instance.email.toLocaleLowerCase();
}
static async ensureTeamExists(instance: TeamMember) {
const team = await instance.$get("team");
if (!team) throw new Error("team not found");
}
static async noUpdateIfLocked(instance: TeamMember) {
await LockableHelper.beforeSave(instance, ["lastLoginAt"]);
}
static async sendTelemetry() {
await CLS.enqueueTask("telemetry:adHoc", { trigger: "team" });
}
static async noDestroyIfLocked(instance: TeamMember) {
await LockableHelper.beforeDestroy(instance);
}
}