From 7bc52705514a60be0f9b41afa192b5b11e9297bf Mon Sep 17 00:00:00 2001 From: Mohamed Marrouchi Date: Sat, 21 Sep 2024 12:15:36 +0100 Subject: [PATCH 1/2] refactor: populate queries --- .../repositories/bot-stats.repository.ts | 2 +- api/src/chat/controllers/block.controller.ts | 34 ++++----- .../chat/controllers/category.controller.ts | 2 - api/src/chat/controllers/label.controller.ts | 18 +++-- .../chat/controllers/message.controller.ts | 18 +++-- .../chat/controllers/subscriber.controller.ts | 15 ++-- api/src/chat/repositories/block.repository.ts | 69 ++++--------------- .../repositories/conversation.repository.ts | 7 +- api/src/chat/repositories/label.repository.ts | 56 ++++----------- .../chat/repositories/message.repository.ts | 48 +++---------- .../repositories/subscriber.repository.ts | 64 ++--------------- api/src/chat/schemas/block.schema.ts | 13 ++++ api/src/chat/schemas/conversation.schema.ts | 12 ++++ api/src/chat/schemas/label.schema.ts | 5 ++ api/src/chat/schemas/message.schema.ts | 5 ++ api/src/chat/schemas/subscriber.schema.ts | 12 ++++ api/src/chat/services/block.service.ts | 27 +------- api/src/chat/services/conversation.service.ts | 12 +++- api/src/chat/services/label.service.ts | 4 +- api/src/chat/services/message.service.ts | 7 +- api/src/chat/services/subscriber.service.ts | 12 +++- api/src/cms/controllers/content.controller.ts | 28 +++++--- api/src/cms/controllers/menu.controller.ts | 9 ++- .../repositories/content-type.repository.ts | 4 -- .../cms/repositories/content.repository.ts | 51 ++++---------- api/src/cms/repositories/menu.repository.ts | 28 ++++---- api/src/cms/schemas/content.schema.ts | 5 ++ api/src/cms/schemas/menu.schema.ts | 5 ++ api/src/cms/services/content.service.ts | 40 +++-------- api/src/cms/services/menu.service.ts | 6 +- .../nlp/controllers/nlp-entity.controller.ts | 33 +++++---- .../nlp/controllers/nlp-sample.controller.ts | 9 ++- .../nlp/controllers/nlp-value.controller.ts | 18 +++-- .../nlp/repositories/nlp-entity.repository.ts | 55 ++++----------- .../nlp-sample-entity.repository.ts | 46 +++---------- .../nlp/repositories/nlp-sample.repository.ts | 68 ++++-------------- .../nlp/repositories/nlp-value.repository.ts | 40 +++-------- api/src/nlp/schemas/nlp-entity.schema.ts | 8 +++ .../nlp/schemas/nlp-sample-entity.schema.ts | 12 ++++ api/src/nlp/schemas/nlp-sample.schema.ts | 10 ++- api/src/nlp/schemas/nlp-value.schema.ts | 8 +++ api/src/nlp/services/nlp-entity.service.ts | 49 +++---------- .../nlp/services/nlp-sample-entity.service.ts | 42 +++-------- api/src/nlp/services/nlp-sample.service.ts | 60 +++------------- api/src/nlp/services/nlp-value.service.ts | 40 +++-------- api/src/user/controllers/model.controller.ts | 21 ++++-- .../user/controllers/permission.controller.ts | 13 +++- api/src/user/controllers/role.controller.ts | 13 ++-- api/src/user/controllers/user.controller.ts | 21 +++--- .../repositories/invitation.repository.ts | 41 +++-------- api/src/user/repositories/model.repository.ts | 45 ++++-------- .../repositories/permission.repository.ts | 12 +++- api/src/user/repositories/role.repository.ts | 12 +++- api/src/user/repositories/user.repository.ts | 52 ++++---------- api/src/user/schemas/invitation.schema.ts | 8 +++ api/src/user/schemas/model.schema.ts | 5 ++ api/src/user/schemas/permission.schema.ts | 8 +++ api/src/user/schemas/role.schema.ts | 5 ++ api/src/user/schemas/user.schema.ts | 9 ++- api/src/user/services/invitation.service.ts | 40 +++-------- api/src/user/services/model.service.ts | 27 +------- api/src/user/services/permission.service.ts | 46 +++---------- api/src/user/services/role.service.ts | 32 +-------- api/src/user/services/user.service.ts | 49 ++----------- api/src/utils/generics/base-controller.ts | 23 ++++--- api/src/utils/generics/base-repository.ts | 48 ++++++++++++- api/src/utils/generics/base-service.ts | 31 ++++++++- 67 files changed, 661 insertions(+), 1016 deletions(-) diff --git a/api/src/analytics/repositories/bot-stats.repository.ts b/api/src/analytics/repositories/bot-stats.repository.ts index 370abddd..71ee8fa5 100644 --- a/api/src/analytics/repositories/bot-stats.repository.ts +++ b/api/src/analytics/repositories/bot-stats.repository.ts @@ -16,7 +16,7 @@ import { BaseRepository } from '@/utils/generics/base-repository'; import { BotStats, BotStatsType } from '../schemas/bot-stats.schema'; @Injectable() -export class BotStatsRepository extends BaseRepository { +export class BotStatsRepository extends BaseRepository { constructor(@InjectModel(BotStats.name) readonly model: Model) { super(model, BotStats); } diff --git a/api/src/chat/controllers/block.controller.ts b/api/src/chat/controllers/block.controller.ts index 9e8dce12..2bf60b3e 100644 --- a/api/src/chat/controllers/block.controller.ts +++ b/api/src/chat/controllers/block.controller.ts @@ -36,14 +36,24 @@ import { PopulatePipe } from '@/utils/pipes/populate.pipe'; import { SearchFilterPipe } from '@/utils/pipes/search-filter.pipe'; import { BlockCreateDto, BlockUpdateDto } from '../dto/block.dto'; -import { Block, BlockFull, BlockStub } from '../schemas/block.schema'; +import { + Block, + BlockFull, + BlockPopulate, + BlockStub, +} from '../schemas/block.schema'; import { BlockService } from '../services/block.service'; import { CategoryService } from '../services/category.service'; import { LabelService } from '../services/label.service'; @UseInterceptors(CsrfInterceptor) @Controller('Block') -export class BlockController extends BaseController { +export class BlockController extends BaseController< + Block, + BlockStub, + BlockPopulate, + BlockFull +> { constructor( private readonly blockService: BlockService, private readonly logger: LoggerService, @@ -68,15 +78,7 @@ export class BlockController extends BaseController { @Query(new SearchFilterPipe({ allowedFields: ['category'] })) filters: TFilterQuery, ): Promise { - return this.canPopulate(populate, [ - 'trigger_labels', - 'assign_labels', - 'nextBlocks', - 'attachedBlock', - 'category', - 'previousBlocks', - 'attachedToBlock', - ]) + return this.canPopulate(populate) ? await this.blockService.findAndPopulate(filters) : await this.blockService.find(filters); } @@ -189,15 +191,7 @@ export class BlockController extends BaseController { @Query(PopulatePipe) populate: string[], ): Promise { - const doc = this.canPopulate(populate, [ - 'trigger_labels', - 'assign_labels', - 'nextBlocks', - 'attachedBlock', - 'category', - 'previousBlocks', - 'attachedToBlock', - ]) + const doc = this.canPopulate(populate) ? await this.blockService.findOneAndPopulate(id) : await this.blockService.findOne(id); if (!doc) { diff --git a/api/src/chat/controllers/category.controller.ts b/api/src/chat/controllers/category.controller.ts index 73c3d055..2c6a3dc4 100644 --- a/api/src/chat/controllers/category.controller.ts +++ b/api/src/chat/controllers/category.controller.ts @@ -33,7 +33,6 @@ import { SearchFilterPipe } from '@/utils/pipes/search-filter.pipe'; import { CategoryCreateDto, CategoryUpdateDto } from '../dto/category.dto'; import { Category } from '../schemas/category.schema'; -import { BlockService } from '../services/block.service'; import { CategoryService } from '../services/category.service'; @UseInterceptors(CsrfInterceptor) @@ -41,7 +40,6 @@ import { CategoryService } from '../services/category.service'; export class CategoryController extends BaseController { constructor( private readonly categoryService: CategoryService, - private readonly blockService: BlockService, private readonly logger: LoggerService, ) { super(categoryService); diff --git a/api/src/chat/controllers/label.controller.ts b/api/src/chat/controllers/label.controller.ts index 475e26c5..596d9db6 100644 --- a/api/src/chat/controllers/label.controller.ts +++ b/api/src/chat/controllers/label.controller.ts @@ -32,12 +32,22 @@ import { PopulatePipe } from '@/utils/pipes/populate.pipe'; import { SearchFilterPipe } from '@/utils/pipes/search-filter.pipe'; import { LabelCreateDto, LabelUpdateDto } from '../dto/label.dto'; -import { Label, LabelStub } from '../schemas/label.schema'; +import { + Label, + LabelFull, + LabelPopulate, + LabelStub, +} from '../schemas/label.schema'; import { LabelService } from '../services/label.service'; @UseInterceptors(CsrfInterceptor) @Controller('label') -export class LabelController extends BaseController { +export class LabelController extends BaseController< + Label, + LabelStub, + LabelPopulate, + LabelFull +> { constructor( private readonly labelService: LabelService, private readonly logger: LoggerService, @@ -53,7 +63,7 @@ export class LabelController extends BaseController { @Query(new SearchFilterPipe