fix: apply feedback

This commit is contained in:
abdou6666
2025-04-03 11:40:22 +01:00
parent ed65938907
commit e350afe3d1
2 changed files with 29 additions and 36 deletions

View File

@@ -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<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'
>,
_criteria: TFilterQuery<Language>,
): Promise<void> {
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');
}
}
}

View File

@@ -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<Language, any, any>,
unknown,
Language,
'deleteOne' | 'deleteMany'
>,
criteria: TFilterQuery<Language>,
) {
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,