52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
import { Entity, Index, Property, OneToMany, Collection, Cascade } from '@mikro-orm/core';
|
|
import { BaseEntity } from '../../../common/entities/base.entity';
|
|
import { UserAddress } from './user-address.entity';
|
|
import { normalizePhone } from '../../utils/phone.util';
|
|
|
|
@Entity({ tableName: 'users' })
|
|
@Index({ properties: ['isActive'] })
|
|
export class User extends BaseEntity {
|
|
|
|
|
|
@Property()
|
|
firstName!: string;
|
|
|
|
@Property({ nullable: true })
|
|
lastName?: string;
|
|
|
|
private _phone!: string;
|
|
|
|
@Property({ unique: true })
|
|
get phone(): string {
|
|
return this._phone;
|
|
}
|
|
|
|
set phone(value: string) {
|
|
this._phone = normalizePhone(value);
|
|
}
|
|
|
|
@Property({ default: null, type: 'date', nullable: true })
|
|
birthDate?: Date;
|
|
|
|
@Property({ default: null, type: 'date', nullable: true })
|
|
marriageDate?: Date;
|
|
|
|
@Property({ nullable: true })
|
|
referrer?: string;
|
|
|
|
@Property({ default: true })
|
|
isActive?: boolean = true;
|
|
|
|
@Property({ default: true, nullable: true })
|
|
gender?: boolean;
|
|
|
|
@Property({ nullable: true })
|
|
avatarUrl?: string;
|
|
|
|
@OneToMany(() => UserAddress, address => address.user, {
|
|
cascade: [Cascade.ALL],
|
|
orphanRemoval: true,
|
|
})
|
|
addresses = new Collection<UserAddress>(this);
|
|
}
|