88 lines
1.9 KiB
TypeScript
88 lines
1.9 KiB
TypeScript
import {
|
|
BeforeInsert,
|
|
Column,
|
|
CreateDateColumn,
|
|
DeleteDateColumn,
|
|
Entity,
|
|
Index,
|
|
PrimaryGeneratedColumn,
|
|
UpdateDateColumn,
|
|
} from 'typeorm';
|
|
import { v4 as uuidv4 } from 'uuid';
|
|
|
|
@Entity()
|
|
@Index('IDX_user_userid', ['userId'], { unique: true })
|
|
@Index('IDX_user_username', ['username'], { unique: true })
|
|
@Index('IDX_user_email', ['email'], {
|
|
unique: true,
|
|
where: 'email IS NOT NULL',
|
|
})
|
|
@Index('IDX_user_phone', ['phone'], {
|
|
unique: true,
|
|
where: 'phone IS NOT NULL',
|
|
})
|
|
export class User {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
userId: string;
|
|
|
|
@Column({ length: 32 })
|
|
username: string;
|
|
|
|
@Column({ length: 30 })
|
|
nickname: string;
|
|
|
|
@BeforeInsert()
|
|
generateDefaults() {
|
|
if (!this.username) {
|
|
this.username = `user_${uuidv4().replace(/-/g, '').slice(0, 27)}`;
|
|
}
|
|
if (!this.nickname) {
|
|
this.nickname = `用户_${uuidv4().replace(/-/g, '').slice(0, 8)}`;
|
|
}
|
|
}
|
|
|
|
@Column({ nullable: true, type: 'char', length: 32 })
|
|
salt: string;
|
|
|
|
@Column({ nullable: true, type: 'char', length: 64 })
|
|
password_hash: string;
|
|
|
|
@Column({
|
|
nullable: true,
|
|
length: 254,
|
|
transformer: {
|
|
to: (value: string | null) => value?.trim() || null,
|
|
from: (value: string | null) => value,
|
|
},
|
|
}) // RFC 5321
|
|
email: string | null;
|
|
|
|
@Column({
|
|
nullable: true,
|
|
length: 20,
|
|
transformer: {
|
|
to: (value: string | null) => value?.trim() || null,
|
|
from: (value: string | null) => value,
|
|
},
|
|
}) // China Mainland
|
|
phone: string | null;
|
|
|
|
@Column({
|
|
nullable: true,
|
|
transformer: {
|
|
to: (value: string | null) => value?.trim() || null,
|
|
from: (value: string | null) => value,
|
|
},
|
|
})
|
|
avatar: string;
|
|
|
|
@CreateDateColumn({ precision: 3 })
|
|
createdAt: Date;
|
|
|
|
@UpdateDateColumn({ precision: 3 })
|
|
updatedAt: Date;
|
|
|
|
@DeleteDateColumn({ nullable: true, precision: 3 })
|
|
deletedAt: Date;
|
|
}
|