diff --git a/src/modules/content/repositories/post.repository.ts b/src/modules/content/repositories/post.repository.ts index 80835dc..3ab8efa 100644 --- a/src/modules/content/repositories/post.repository.ts +++ b/src/modules/content/repositories/post.repository.ts @@ -1,11 +1,21 @@ import { Repository } from 'typeorm'; +import { CommentEntity } from '@/modules/content/entities/comment.entity'; import { PostEntity } from '@/modules/content/entities/post.entity'; import { CustomRepository } from '@/modules/database/decorators/repository.decorator'; @CustomRepository(PostEntity) export class PostRepository extends Repository { buildBaseQB() { - return this.createQueryBuilder('post'); + return this.createQueryBuilder('post') + .leftJoinAndSelect('post.category', 'category') + .leftJoinAndSelect('post.tags', 'tags') + .addSelect((query) => { + return query + .select('COUNT(c.id)', 'count') + .from(CommentEntity, 'c') + .where('c.post.id = post.id'); + }, 'commentCount') + .loadRelationCountAndMap('post.commentCOunt', 'post.comments'); } } diff --git a/src/modules/content/repositories/tag.repository.ts b/src/modules/content/repositories/tag.repository.ts new file mode 100644 index 0000000..5bf9646 --- /dev/null +++ b/src/modules/content/repositories/tag.repository.ts @@ -0,0 +1,19 @@ +import { Repository } from 'typeorm'; + +import { PostEntity } from '@/modules/content/entities/post.entity'; +import { TagEntity } from '@/modules/content/entities/tag.entity'; +import { CustomRepository } from '@/modules/database/decorators/repository.decorator'; + +@CustomRepository(TagEntity) +export class TagRepository extends Repository { + buildBaseQB() { + return this.createQueryBuilder('tag') + .leftJoinAndSelect('tag.posts', 'posts') + .addSelect( + (query) => query.select('COUNT(p.id)', 'count').from(PostEntity, 'p'), + 'postCount', + ) + .orderBy('postCount', 'DESC') + .loadRelationCountAndMap('tag.postCount', 'tag.posts'); + } +}