mirror of
https://github.com/hexastack/hexabot
synced 2025-06-26 18:27:28 +00:00
Merge pull request #871 from Hexastack/fix/cleanup-languageId-nlp-sample
fix: cleanup languageId from NlpSamples on language deletion
This commit is contained in:
commit
ef1713145b
@ -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,30 +25,4 @@ export class LanguageRepository extends BaseRepository<
|
||||
constructor(@InjectModel(Language.name) readonly model: Model<Language>) {
|
||||
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<Language, any, any>,
|
||||
unknown,
|
||||
Language,
|
||||
'deleteOne' | 'deleteMany'
|
||||
>,
|
||||
_criteria: TFilterQuery<Language>,
|
||||
): Promise<void> {
|
||||
if (_criteria._id) {
|
||||
const language = await this.find(
|
||||
typeof _criteria === 'string' ? { _id: _criteria } : _criteria,
|
||||
);
|
||||
this.eventEmitter.emit('hook:language:delete', language);
|
||||
} else {
|
||||
throw new Error('Attempted to delete language using unknown criteria');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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,16 +235,48 @@ export class NlpSampleService extends BaseService<
|
||||
*
|
||||
* @param language The language that has been deleted.
|
||||
*/
|
||||
@OnEvent('hook:language:delete')
|
||||
async handleLanguageDelete(language: Language) {
|
||||
await this.updateMany(
|
||||
@OnEvent('hook:language:preDelete')
|
||||
async handleLanguageDelete(
|
||||
_query: Query<
|
||||
DeleteResult,
|
||||
Document<Language, any, any>,
|
||||
unknown,
|
||||
Language,
|
||||
'deleteOne' | 'deleteMany'
|
||||
>,
|
||||
criteria: TFilterQuery<Language>,
|
||||
) {
|
||||
const deletedLanguages = await this.languageService.find(
|
||||
criteria,
|
||||
undefined,
|
||||
{
|
||||
language: language.id,
|
||||
},
|
||||
{
|
||||
language: null,
|
||||
id: 1,
|
||||
},
|
||||
);
|
||||
const deletedLanguagesIds = deletedLanguages.map(
|
||||
(deletedLanguage) => deletedLanguage.id,
|
||||
);
|
||||
|
||||
this.logger.debug(
|
||||
`Found ${deletedLanguagesIds.length} languages to clean up`,
|
||||
);
|
||||
|
||||
if (deletedLanguagesIds.length > 0) {
|
||||
await this.updateMany(
|
||||
{
|
||||
language: {
|
||||
$in: deletedLanguagesIds,
|
||||
},
|
||||
},
|
||||
{
|
||||
language: null,
|
||||
},
|
||||
).then((result) => {
|
||||
this.logger.debug(
|
||||
`Cleaned up languageId from ${result.modifiedCount} NLP samples`,
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@OnEvent('hook:message:preCreate')
|
||||
|
Loading…
Reference in New Issue
Block a user