import Model from "../../db/Model"; import Validator from "../../db/Validator"; import MysqlConnectionManager from "../../db/MysqlConnectionManager"; import AddApprovedFieldToUsersTable from "../migrations/AddApprovedFieldToUsersTable"; import config from "config"; import {ManyModelRelation} from "../../db/ModelRelation"; import UserEmail from "./UserEmail"; export default class User extends Model { public static isApprovalMode(): boolean { return config.get('approval_mode') && MysqlConnectionManager.hasMigration(AddApprovedFieldToUsersTable); } public name?: string; public approved: boolean = false; public is_admin: boolean = false; public created_at?: Date; public updated_at?: Date; public readonly emails = new ManyModelRelation(this, UserEmail, { localKey: 'id', foreignKey: 'user_id' }); public readonly mainEmail = this.emails.clone().constraint(q => q.where('main', true)); protected init(): void { this.addProperty('name', new Validator().acceptUndefined().between(3, 64)); if (User.isApprovalMode()) this.addProperty('approved', new Validator().defined()); this.addProperty('is_admin', new Validator().defined()); this.addProperty('created_at'); this.addProperty('updated_at'); } public isApproved(): boolean { return !User.isApprovalMode() || this.approved!; } }