diff --git a/src/modules/user/entities/access.token.entity.ts b/src/modules/user/entities/access.token.entity.ts new file mode 100644 index 0000000..cbe271c --- /dev/null +++ b/src/modules/user/entities/access.token.entity.ts @@ -0,0 +1,16 @@ +import { Entity, OneToOne } from 'typeorm'; + +import { BaseToken } from '@/modules/user/entities/base.token'; +import { RefreshTokenEntity } from '@/modules/user/entities/refresh.token.entity'; + +/** + * 用户认证token模型 + */ +@Entity('user_access_token') +export class AccessTokenEntity extends BaseToken { + /** + * 关联的刷新令牌 + */ + @OneToOne(() => RefreshTokenEntity, (token) => token.accessToken, { cascade: true }) + refreshToken: string; +} diff --git a/src/modules/user/entities/base.token.ts b/src/modules/user/entities/base.token.ts new file mode 100644 index 0000000..d0a2d32 --- /dev/null +++ b/src/modules/user/entities/base.token.ts @@ -0,0 +1,24 @@ +import { Exclude } from 'class-transformer'; +import { BaseEntity, Column, CreateDateColumn, PrimaryColumn } from 'typeorm'; + +/** + * Token模型 + */ +@Exclude() +export abstract class BaseToken extends BaseEntity { + @PrimaryColumn({ type: 'varchar', generated: 'uuid', length: 36 }) + id: string; + + @Column({ length: 500, comment: '令牌字符串' }) + value: string; + + @Column({ + comment: '令牌过期时间', + }) + expired_at: Date; + + @CreateDateColumn({ + comment: '令牌创建时间', + }) + createdAt: Date; +} diff --git a/src/modules/user/entities/refresh.token.entity.ts b/src/modules/user/entities/refresh.token.entity.ts new file mode 100644 index 0000000..4015b30 --- /dev/null +++ b/src/modules/user/entities/refresh.token.entity.ts @@ -0,0 +1,17 @@ +import { Entity, JoinColumn, OneToOne, Relation } from 'typeorm'; + +import { AccessTokenEntity } from '@/modules/user/entities/access.token.entity'; +import { BaseToken } from '@/modules/user/entities/base.token'; + +/** + * 刷新Token的Token模型 + */ +@Entity('user_refresh_token') +export class RefreshTokenEntity extends BaseToken { + /** + * 关联的登录令牌 + */ + @OneToOne(() => AccessTokenEntity, (token) => token.refreshToken, { onDelete: 'CASCADE' }) + @JoinColumn() + accessToken: Relation; +}