From 68b06801d354538cb0ee05b3104f7fad84421f3f Mon Sep 17 00:00:00 2001 From: liuyi Date: Mon, 2 Jun 2025 19:21:24 +0800 Subject: [PATCH] add base repository --- .../content/repositories/post.repository.ts | 17 +++++++++-------- .../content/repositories/tag.repository.ts | 14 ++++++++------ src/modules/database/utils.ts | 2 +- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/modules/content/repositories/post.repository.ts b/src/modules/content/repositories/post.repository.ts index 3ab8efa..41c42f6 100644 --- a/src/modules/content/repositories/post.repository.ts +++ b/src/modules/content/repositories/post.repository.ts @@ -1,21 +1,22 @@ -import { Repository } from 'typeorm'; - import { CommentEntity } from '@/modules/content/entities/comment.entity'; import { PostEntity } from '@/modules/content/entities/post.entity'; +import { BaseRepository } from '@/modules/database/base/repository'; import { CustomRepository } from '@/modules/database/decorators/repository.decorator'; @CustomRepository(PostEntity) -export class PostRepository extends Repository { +export class PostRepository extends BaseRepository { + protected _qbName = 'post'; + buildBaseQB() { - return this.createQueryBuilder('post') - .leftJoinAndSelect('post.category', 'category') - .leftJoinAndSelect('post.tags', 'tags') + return this.createQueryBuilder(this.qbName) + .leftJoinAndSelect(`${this.qbName}.category`, 'category') + .leftJoinAndSelect(`${this.qbName}.tags`, 'tags') .addSelect((query) => { return query .select('COUNT(c.id)', 'count') .from(CommentEntity, 'c') - .where('c.post.id = post.id'); + .where(`c.post.id = ${this.qbName}.id`); }, 'commentCount') - .loadRelationCountAndMap('post.commentCOunt', 'post.comments'); + .loadRelationCountAndMap(`${this.qbName}.commentCOunt`, `${this.qbName}.comments`); } } diff --git a/src/modules/content/repositories/tag.repository.ts b/src/modules/content/repositories/tag.repository.ts index 5bf9646..29674db 100644 --- a/src/modules/content/repositories/tag.repository.ts +++ b/src/modules/content/repositories/tag.repository.ts @@ -1,19 +1,21 @@ -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'; +import { BaseRepository } from '../../database/base/repository'; + @CustomRepository(TagEntity) -export class TagRepository extends Repository { +export class TagRepository extends BaseRepository { + protected _qbName = 'tag'; + buildBaseQB() { - return this.createQueryBuilder('tag') - .leftJoinAndSelect('tag.posts', 'posts') + return this.createQueryBuilder(this.qbName) + .leftJoinAndSelect(`${this.qbName}.posts`, 'posts') .addSelect( (query) => query.select('COUNT(p.id)', 'count').from(PostEntity, 'p'), 'postCount', ) .orderBy('postCount', 'DESC') - .loadRelationCountAndMap('tag.postCount', 'tag.posts'); + .loadRelationCountAndMap(`${this.qbName}.postCount`, `${this.qbName}.posts`); } } diff --git a/src/modules/database/utils.ts b/src/modules/database/utils.ts index cf3879d..c64d5c7 100644 --- a/src/modules/database/utils.ts +++ b/src/modules/database/utils.ts @@ -1,7 +1,7 @@ import { isArray, isNil } from 'lodash'; import { ObjectLiteral, SelectQueryBuilder } from 'typeorm'; -import { PaginateOptions, PaginateReturn } from '@/modules/database/types'; +import { OrderQueryType, PaginateOptions, PaginateReturn } from '@/modules/database/types'; export const paginate = async ( qb: SelectQueryBuilder,