From 99f0f0eb2f9531d5fc0a2ffb82417a0c427974e9 Mon Sep 17 00:00:00 2001 From: yassinedorbozgithub Date: Thu, 12 Jun 2025 17:41:20 +0100 Subject: [PATCH] fix(api): enhance logic --- .../controllers/category.contoller.spec.ts | 2 +- .../chat/repositories/category.repository.ts | 25 ++++++--------- api/src/chat/services/block.service.ts | 32 ++++++++++--------- api/src/chat/services/subscriber.service.ts | 14 ++++---- .../repositories/content-type.repository.ts | 15 +++++---- .../nlp/repositories/nlp-sample.repository.ts | 5 ++- api/src/utils/helpers/criteria.ts | 21 ------------ 7 files changed, 48 insertions(+), 66 deletions(-) delete mode 100644 api/src/utils/helpers/criteria.ts diff --git a/api/src/chat/controllers/category.contoller.spec.ts b/api/src/chat/controllers/category.contoller.spec.ts index f8a8063b..70651403 100644 --- a/api/src/chat/controllers/category.contoller.spec.ts +++ b/api/src/chat/controllers/category.contoller.spec.ts @@ -91,7 +91,7 @@ describe('CategoryController', () => { { provide: BlockService, useValue: { - findOne: jest.fn(), + findOneAndPopulate: jest.fn(), }, }, ], diff --git a/api/src/chat/repositories/category.repository.ts b/api/src/chat/repositories/category.repository.ts index 6f24dd87..dc628d21 100644 --- a/api/src/chat/repositories/category.repository.ts +++ b/api/src/chat/repositories/category.repository.ts @@ -11,7 +11,6 @@ import { InjectModel } from '@nestjs/mongoose'; import { Document, Model, Query } from 'mongoose'; import { BaseRepository, DeleteResult } from '@/utils/generics/base-repository'; -import { getCriteriaIds } from '@/utils/helpers/criteria'; import { TFilterQuery } from '@/utils/types/filter.types'; import { CategoryDto } from '../dto/category.dto'; @@ -25,14 +24,11 @@ export class CategoryRepository extends BaseRepository< never, CategoryDto > { - private readonly blockService: BlockService; - constructor( @InjectModel(Category.name) readonly model: Model, - @Optional() blockService?: BlockService, + @Optional() private readonly blockService?: BlockService, ) { super(model, Category); - this.blockService = blockService!; } /** @@ -43,7 +39,7 @@ export class CategoryRepository extends BaseRepository< * @param criteria - The filter criteria for finding blocks to delete. */ async preDelete( - query: Query< + _query: Query< DeleteResult, Document, unknown, @@ -52,19 +48,18 @@ export class CategoryRepository extends BaseRepository< >, criteria: TFilterQuery, ) { - criteria = query.getQuery(); - const ids = getCriteriaIds(criteria); - - for (const id of ids) { - const associatedBlocks = await this.blockService.findOne({ - category: id, + if (criteria._id) { + const block = await this.blockService?.findOneAndPopulate({ + category: criteria._id, }); - if (associatedBlocks) { - const category = await this.findOne({ _id: id }); + + if (block) { throw new ForbiddenException( - `Category ${category?.label || id} has blocks associated with it`, + `Category ${block.category?.label} has at least one associated block`, ); } + } else { + throw new Error('Attempted to delete category using unknown criteria'); } } } diff --git a/api/src/chat/services/block.service.ts b/api/src/chat/services/block.service.ts index 496c653d..3a23741a 100644 --- a/api/src/chat/services/block.service.ts +++ b/api/src/chat/services/block.service.ts @@ -21,7 +21,6 @@ import { PluginType } from '@/plugins/types'; import { SettingService } from '@/setting/services/setting.service'; import { FALLBACK_DEFAULT_NLU_PENALTY_FACTOR } from '@/utils/constants/nlp'; import { BaseService } from '@/utils/generics/base-service'; -import { getCriteriaIds } from '@/utils/helpers/criteria'; import { getRandomElement } from '@/utils/helpers/safeRandom'; import { TFilterQuery } from '@/utils/types/filter.types'; @@ -786,20 +785,23 @@ export class BlockService extends BaseService< */ @OnEvent('hook:label:preDelete') async handleLabelDelete(_query: unknown, criteria: TFilterQuery