From ed6593890731b289e4ca03e87069ac564b80ddc4 Mon Sep 17 00:00:00 2001 From: abdou6666 Date: Wed, 2 Apr 2025 11:42:29 +0100 Subject: [PATCH 1/4] fix: cleanup languageId from NlpSamples on language deletion --- api/src/i18n/repositories/language.repository.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/api/src/i18n/repositories/language.repository.ts b/api/src/i18n/repositories/language.repository.ts index 09128054..270da9d2 100644 --- a/api/src/i18n/repositories/language.repository.ts +++ b/api/src/i18n/repositories/language.repository.ts @@ -39,14 +39,17 @@ export class LanguageRepository extends BaseRepository< Document, unknown, Language, - 'deleteOne' | 'deleteMany' + 'deleteOne' >, _criteria: TFilterQuery, ): Promise { if (_criteria._id) { - const language = await this.find( + const language = await this.findOne( typeof _criteria === 'string' ? { _id: _criteria } : _criteria, ); + if (!language) { + return; + } this.eventEmitter.emit('hook:language:delete', language); } else { throw new Error('Attempted to delete language using unknown criteria'); From e350afe3d156047c7a1985875996ead8a907eacb Mon Sep 17 00:00:00 2001 From: abdou6666 Date: Thu, 3 Apr 2025 11:40:22 +0100 Subject: [PATCH 2/4] fix: apply feedback --- .../i18n/repositories/language.repository.ts | 34 ++----------------- api/src/nlp/services/nlp-sample.service.ts | 31 ++++++++++++++--- 2 files changed, 29 insertions(+), 36 deletions(-) diff --git a/api/src/i18n/repositories/language.repository.ts b/api/src/i18n/repositories/language.repository.ts index 270da9d2..77bf26a7 100644 --- a/api/src/i18n/repositories/language.repository.ts +++ b/api/src/i18n/repositories/language.repository.ts @@ -8,10 +8,9 @@ import { Injectable } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; -import { Document, Model, Query } from 'mongoose'; +import { Model } from 'mongoose'; -import { BaseRepository, DeleteResult } from '@/utils/generics/base-repository'; -import { TFilterQuery } from '@/utils/types/filter.types'; +import { BaseRepository } from '@/utils/generics/base-repository'; import { LanguageDto } from '../dto/language.dto'; import { Language } from '../schemas/language.schema'; @@ -26,33 +25,4 @@ export class LanguageRepository extends BaseRepository< constructor(@InjectModel(Language.name) readonly model: Model) { super(model, Language); } - - /** - * Pre-delete hook that triggers before an language is deleted. - * - * @param query The query used to delete the language. - * @param criteria The filter criteria used to find the language for deletion. - */ - async preDelete( - _query: Query< - DeleteResult, - Document, - unknown, - Language, - 'deleteOne' - >, - _criteria: TFilterQuery, - ): Promise { - if (_criteria._id) { - const language = await this.findOne( - typeof _criteria === 'string' ? { _id: _criteria } : _criteria, - ); - if (!language) { - return; - } - this.eventEmitter.emit('hook:language:delete', language); - } else { - throw new Error('Attempted to delete language using unknown criteria'); - } - } } diff --git a/api/src/nlp/services/nlp-sample.service.ts b/api/src/nlp/services/nlp-sample.service.ts index f2f33e7d..07a4560e 100644 --- a/api/src/nlp/services/nlp-sample.service.ts +++ b/api/src/nlp/services/nlp-sample.service.ts @@ -12,13 +12,15 @@ import { NotFoundException, } from '@nestjs/common'; import { OnEvent } from '@nestjs/event-emitter'; +import { Document, Query } from 'mongoose'; import Papa from 'papaparse'; import { Message } from '@/chat/schemas/message.schema'; import { Language } from '@/i18n/schemas/language.schema'; import { LanguageService } from '@/i18n/services/language.service'; +import { DeleteResult } from '@/utils/generics/base-repository'; import { BaseService } from '@/utils/generics/base-service'; -import { THydratedDocument } from '@/utils/types/filter.types'; +import { TFilterQuery, THydratedDocument } from '@/utils/types/filter.types'; import { NlpSampleEntityCreateDto } from '../dto/nlp-sample-entity.dto'; import { NlpSampleCreateDto, TNlpSampleDto } from '../dto/nlp-sample.dto'; @@ -233,11 +235,32 @@ export class NlpSampleService extends BaseService< * * @param language The language that has been deleted. */ - @OnEvent('hook:language:delete') - async handleLanguageDelete(language: Language) { + @OnEvent('hook:language:preDelete') + async handleLanguageDelete( + _query: Query< + DeleteResult, + Document, + unknown, + Language, + 'deleteOne' | 'deleteMany' + >, + criteria: TFilterQuery, + ) { + const deletedLanguages = await this.languageService.find( + criteria, + undefined, + { + id: 1, + }, + ); + const deletedLanguagesIds = deletedLanguages.map( + (deletedLanguage) => deletedLanguage.id, + ); await this.updateMany( { - language: language.id, + language: { + $in: deletedLanguagesIds, + }, }, { language: null, From f74066b577a0cdcbd86d1adbcc6b27d6fe85670d Mon Sep 17 00:00:00 2001 From: yassinedorbozgithub Date: Sat, 12 Apr 2025 06:52:25 +0100 Subject: [PATCH 3/4] fix(api): apply feedback update --- api/src/nlp/services/nlp-sample.service.ts | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/api/src/nlp/services/nlp-sample.service.ts b/api/src/nlp/services/nlp-sample.service.ts index 07a4560e..754b631c 100644 --- a/api/src/nlp/services/nlp-sample.service.ts +++ b/api/src/nlp/services/nlp-sample.service.ts @@ -256,16 +256,19 @@ export class NlpSampleService extends BaseService< const deletedLanguagesIds = deletedLanguages.map( (deletedLanguage) => deletedLanguage.id, ); - await this.updateMany( - { - language: { - $in: deletedLanguagesIds, + + if (deletedLanguagesIds.length > 0) { + await this.updateMany( + { + language: { + $in: deletedLanguagesIds, + }, }, - }, - { - language: null, - }, - ); + { + language: null, + }, + ); + } } @OnEvent('hook:message:preCreate') From 55d1eade0055d114afd4be2ac0bc328bc1c3401c Mon Sep 17 00:00:00 2001 From: yassinedorbozgithub Date: Sat, 12 Apr 2025 06:58:10 +0100 Subject: [PATCH 4/4] fix(api): add logs --- api/src/nlp/services/nlp-sample.service.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/api/src/nlp/services/nlp-sample.service.ts b/api/src/nlp/services/nlp-sample.service.ts index 754b631c..665f8cc7 100644 --- a/api/src/nlp/services/nlp-sample.service.ts +++ b/api/src/nlp/services/nlp-sample.service.ts @@ -257,6 +257,10 @@ export class NlpSampleService extends BaseService< (deletedLanguage) => deletedLanguage.id, ); + this.logger.debug( + `Found ${deletedLanguagesIds.length} languages to clean up`, + ); + if (deletedLanguagesIds.length > 0) { await this.updateMany( { @@ -267,7 +271,11 @@ export class NlpSampleService extends BaseService< { language: null, }, - ); + ).then((result) => { + this.logger.debug( + `Cleaned up languageId from ${result.modifiedCount} NLP samples`, + ); + }); } }