From de0d2fe3337ba954a4afabacc8980cccedecbe0c Mon Sep 17 00:00:00 2001 From: liuyi Date: Tue, 20 May 2025 13:46:58 +0800 Subject: [PATCH] add relations --- .../content/entities/CategoryEntity.ts | 25 ++++++++++++++++--- .../content/entities/comment.entity.ts | 24 ++++++++++++++++-- src/modules/content/entities/post.entity.ts | 4 +-- src/modules/content/entities/tag.entity.ts | 2 +- 4 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/modules/content/entities/CategoryEntity.ts b/src/modules/content/entities/CategoryEntity.ts index 86e35ba..7bd5bc2 100644 --- a/src/modules/content/entities/CategoryEntity.ts +++ b/src/modules/content/entities/CategoryEntity.ts @@ -1,9 +1,20 @@ -import { Column, Entity, OneToMany, PrimaryColumn, Relation } from 'typeorm'; +import { + BaseEntity, + Column, + Entity, + OneToMany, + PrimaryColumn, + Relation, + Tree, + TreeChildren, + TreeParent, +} from 'typeorm'; import { PostEntity } from '@/modules/content/entities/post.entity'; @Entity('content_category') -export class CategoryEntity { +@Tree('materialized-path') +export class CategoryEntity extends BaseEntity { @PrimaryColumn({ type: 'varchar', generated: 'uuid', length: 36 }) id: string; @@ -14,5 +25,13 @@ export class CategoryEntity { customOrder: number; @OneToMany(() => PostEntity, (post) => post.category, { cascade: true }) - posts: Relation; + posts: Relation[]; + + depth = 0; + + @TreeParent({ onDelete: 'NO ACTION' }) + parent: Relation | null; + + @TreeChildren({ cascade: true }) + children: Relation[]; } diff --git a/src/modules/content/entities/comment.entity.ts b/src/modules/content/entities/comment.entity.ts index 181cad4..f323c81 100644 --- a/src/modules/content/entities/comment.entity.ts +++ b/src/modules/content/entities/comment.entity.ts @@ -1,9 +1,21 @@ -import { Column, CreateDateColumn, Entity, ManyToOne, PrimaryColumn, Relation } from 'typeorm'; +import { + BaseEntity, + Column, + CreateDateColumn, + Entity, + ManyToOne, + PrimaryColumn, + Relation, + Tree, + TreeChildren, + TreeParent, +} from 'typeorm'; import { PostEntity } from '@/modules/content/entities/post.entity'; @Entity('content_comment') -export class CommentEntity { +@Tree('materialized-path') +export class CommentEntity extends BaseEntity { @PrimaryColumn({ type: 'varchar', length: 36, generated: 'uuid' }) id: string; @@ -19,4 +31,12 @@ export class CommentEntity { onUpdate: 'CASCADE', }) post: Relation; + + depth = 0; + + @TreeParent({ onDelete: 'CASCADE' }) + parent: Relation | null; + + @TreeChildren({ cascade: true }) + children: Relation[]; } diff --git a/src/modules/content/entities/post.entity.ts b/src/modules/content/entities/post.entity.ts index a7a47fb..efd2632 100644 --- a/src/modules/content/entities/post.entity.ts +++ b/src/modules/content/entities/post.entity.ts @@ -73,8 +73,8 @@ export class PostEntity extends BaseEntity { @Expose() @ManyToMany(() => TagEntity, (tag) => tag.posts, { cascade: true }) @JoinTable() - tags: Relation; + tags: Relation[]; @OneToMany(() => CommentEntity, (comment) => comment.post, { cascade: true }) - comments: Relation; + comments: Relation[]; } diff --git a/src/modules/content/entities/tag.entity.ts b/src/modules/content/entities/tag.entity.ts index 92bb285..da0817d 100644 --- a/src/modules/content/entities/tag.entity.ts +++ b/src/modules/content/entities/tag.entity.ts @@ -16,5 +16,5 @@ export class TagEntity { @Expose() @ManyToMany(() => PostEntity, (post) => post.tags) - posts: Relation; + posts: Relation[]; }