56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
|
import { ApiHideProperty, ApiProperty } from '@nestjs/swagger'
|
|||
|
import { Exclude } from 'class-transformer'
|
|||
|
import {
|
|||
|
BaseEntity,
|
|||
|
Column,
|
|||
|
CreateDateColumn,
|
|||
|
PrimaryGeneratedColumn,
|
|||
|
UpdateDateColumn,
|
|||
|
VirtualColumn,
|
|||
|
} from 'typeorm'
|
|||
|
|
|||
|
// 如果觉得前端转换时间太麻烦,并且不考虑通用性的话,可以在服务端进行转换,eg: @UpdateDateColumn({ name: 'updated_at', transformer })
|
|||
|
// const transformer: ValueTransformer = {
|
|||
|
// to(value) {
|
|||
|
// return value
|
|||
|
// },
|
|||
|
// from(value) {
|
|||
|
// return dayjs(value).format('YYYY-MM-DD HH:mm:ss')
|
|||
|
// },
|
|||
|
// }
|
|||
|
|
|||
|
export abstract class CommonEntity extends BaseEntity {
|
|||
|
@PrimaryGeneratedColumn()
|
|||
|
id: number
|
|||
|
|
|||
|
@CreateDateColumn({ name: 'created_at' })
|
|||
|
createdAt: Date
|
|||
|
|
|||
|
@UpdateDateColumn({ name: 'updated_at' })
|
|||
|
updatedAt: Date
|
|||
|
}
|
|||
|
|
|||
|
export abstract class CompleteEntity extends CommonEntity {
|
|||
|
@ApiHideProperty()
|
|||
|
@Exclude()
|
|||
|
@Column({ name: 'create_by', update: false, comment: '创建者' })
|
|||
|
createBy: number
|
|||
|
|
|||
|
@ApiHideProperty()
|
|||
|
@Exclude()
|
|||
|
@Column({ name: 'update_by', comment: '更新者' })
|
|||
|
updateBy: number
|
|||
|
|
|||
|
/**
|
|||
|
* 不会保存到数据库中的虚拟列,数据量大时可能会有性能问题,有性能要求请考虑在 service 层手动实现
|
|||
|
* @see https://typeorm.io/decorator-reference#virtualcolumn
|
|||
|
*/
|
|||
|
@ApiProperty({ description: '创建者' })
|
|||
|
@VirtualColumn({ query: alias => `SELECT username FROM sys_user WHERE id = ${alias}.create_by` })
|
|||
|
creator: string
|
|||
|
|
|||
|
@ApiProperty({ description: '更新者' })
|
|||
|
@VirtualColumn({ query: alias => `SELECT username FROM sys_user WHERE id = ${alias}.update_by` })
|
|||
|
updater: string
|
|||
|
}
|