swaf/src/auth/models/User.ts

46 lines
1.7 KiB
TypeScript
Raw Normal View History

2020-04-24 12:12:27 +02:00
import Model from "../../db/Model";
2020-06-16 11:12:58 +02:00
import MysqlConnectionManager from "../../db/MysqlConnectionManager";
import AddApprovedFieldToUsersTable from "../migrations/AddApprovedFieldToUsersTable";
import config from "config";
import {ManyModelRelation} from "../../db/ModelRelation";
import UserEmail from "./UserEmail";
2020-07-24 12:13:28 +02:00
import ModelFactory from "../../db/ModelFactory";
import UserApprovedComponent from "./UserApprovedComponent";
2020-04-24 12:12:27 +02:00
export default class User extends Model {
2020-06-16 11:12:58 +02:00
public static isApprovalMode(): boolean {
return config.get<boolean>('approval_mode') && MysqlConnectionManager.hasMigration(AddApprovedFieldToUsersTable);
}
public readonly id?: number = undefined;
public name?: string = undefined;
2020-07-24 16:13:15 +02:00
public main_user_email_id?: number = undefined;
public is_admin: boolean = false;
public created_at?: Date = undefined;
public updated_at?: Date = undefined;
2020-04-24 12:12:27 +02:00
2020-07-24 12:13:28 +02:00
public readonly emails = new ManyModelRelation(this, ModelFactory.get(UserEmail), {
localKey: 'id',
foreignKey: 'user_id'
});
2020-07-24 16:13:15 +02:00
public readonly mainEmail = this.emails.cloneReduceToOne().constraint(q => q.where('id', this.main_user_email_id));
2020-07-24 12:13:28 +02:00
public constructor(data: any) {
2020-06-27 17:11:31 +02:00
super(data);
}
protected init(): void {
2020-07-24 12:13:28 +02:00
this.setValidation('name').acceptUndefined().between(3, 64);
2020-07-24 16:13:15 +02:00
this.setValidation('main_user_email_id').acceptUndefined().exists(UserEmail, 'id');
2020-07-24 12:13:28 +02:00
if (User.isApprovalMode()) {
this.setValidation('approved').defined();
}
this.setValidation('is_admin').defined();
2020-04-24 12:12:27 +02:00
}
2020-06-16 11:12:58 +02:00
public isApproved(): boolean {
2020-07-24 12:13:28 +02:00
return !User.isApprovalMode() || this.as(UserApprovedComponent).approved;
2020-04-24 12:12:27 +02:00
}
2020-07-24 12:13:28 +02:00
}