mirror of
https://github.com/hexastack/hexabot
synced 2025-06-26 18:27:28 +00:00
fix: update repositories
This commit is contained in:
@@ -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 { LabelDto } from '../dto/label.dto';
|
||||
import {
|
||||
@@ -59,32 +58,4 @@ export class LabelRepository extends BaseRepository<
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Before deleting a label, this method fetches the label(s) based on the given criteria and emits a delete event.
|
||||
*
|
||||
* @param query - The Mongoose query object used for deletion.
|
||||
* @param criteria - The filter criteria for finding the labels to be deleted.
|
||||
*
|
||||
* @returns {Promise<void>} A promise that resolves once the event is emitted.
|
||||
*/
|
||||
async preDelete(
|
||||
_query: Query<
|
||||
DeleteResult,
|
||||
Document<Label, any, any>,
|
||||
unknown,
|
||||
Label,
|
||||
'deleteOne' | 'deleteMany'
|
||||
>,
|
||||
_criteria: TFilterQuery<Label>,
|
||||
): Promise<void> {
|
||||
const ids = Array.isArray(_criteria._id?.$in)
|
||||
? _criteria._id.$in
|
||||
: Array.isArray(_criteria._id)
|
||||
? _criteria._id
|
||||
: [_criteria._id];
|
||||
|
||||
const labels = await this.find({ _id: { $in: ids } });
|
||||
this.eventEmitter.emit('hook:label:delete', labels);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,8 +10,7 @@ import { Injectable } from '@nestjs/common';
|
||||
import { InjectModel } from '@nestjs/mongoose';
|
||||
import { Document, Model, Query } 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 { NlpEntityDto } from '../dto/nlp-entity.dto';
|
||||
import {
|
||||
@@ -22,9 +21,6 @@ import {
|
||||
NlpEntityPopulate,
|
||||
} from '../schemas/nlp-entity.schema';
|
||||
|
||||
import { NlpSampleEntityRepository } from './nlp-sample-entity.repository';
|
||||
import { NlpValueRepository } from './nlp-value.repository';
|
||||
|
||||
@Injectable()
|
||||
export class NlpEntityRepository extends BaseRepository<
|
||||
NlpEntity,
|
||||
@@ -32,11 +28,7 @@ export class NlpEntityRepository extends BaseRepository<
|
||||
NlpEntityFull,
|
||||
NlpEntityDto
|
||||
> {
|
||||
constructor(
|
||||
@InjectModel(NlpEntity.name) readonly model: Model<NlpEntity>,
|
||||
private readonly nlpValueRepository: NlpValueRepository,
|
||||
private readonly nlpSampleEntityRepository: NlpSampleEntityRepository,
|
||||
) {
|
||||
constructor(@InjectModel(NlpEntity.name) readonly model: Model<NlpEntity>) {
|
||||
super(model, NlpEntity, NLP_ENTITY_POPULATE, NlpEntityFull);
|
||||
}
|
||||
|
||||
@@ -77,40 +69,4 @@ export class NlpEntityRepository extends BaseRepository<
|
||||
this.eventEmitter.emit('hook:nlpEntity:update', updated);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Pre-delete hook that triggers before an NLP entity is deleted.
|
||||
* Deletes related NLP values and sample entities before the entity deletion.
|
||||
* Emits an event to notify other parts of the system about the deletion.
|
||||
* Bypasses built-in entities.
|
||||
*
|
||||
* @param query The query used to delete the entity.
|
||||
* @param criteria The filter criteria used to find the entity for deletion.
|
||||
*/
|
||||
async preDelete(
|
||||
_query: Query<
|
||||
DeleteResult,
|
||||
Document<NlpEntity, any, any>,
|
||||
unknown,
|
||||
NlpEntity,
|
||||
'deleteOne' | 'deleteMany'
|
||||
>,
|
||||
criteria: TFilterQuery<NlpEntity>,
|
||||
): Promise<void> {
|
||||
if (criteria._id) {
|
||||
await this.nlpValueRepository.deleteMany({ entity: criteria._id });
|
||||
await this.nlpSampleEntityRepository.deleteMany({ entity: criteria._id });
|
||||
|
||||
const entities = await this.find(
|
||||
typeof criteria === 'string' ? { _id: criteria } : criteria,
|
||||
);
|
||||
entities
|
||||
.filter((e) => !e.builtin)
|
||||
.map((e) => {
|
||||
this.eventEmitter.emit('hook:nlpEntity:delete', e);
|
||||
});
|
||||
} else {
|
||||
throw new Error('Attempted to delete NLP entity using unknown criteria');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ import {
|
||||
Types,
|
||||
} from 'mongoose';
|
||||
|
||||
import { BaseRepository, DeleteResult } from '@/utils/generics/base-repository';
|
||||
import { BaseRepository } from '@/utils/generics/base-repository';
|
||||
import { PageQueryDto } from '@/utils/pagination/pagination-query.dto';
|
||||
import { TFilterQuery } from '@/utils/types/filter.types';
|
||||
import { Format } from '@/utils/types/format.types';
|
||||
@@ -35,8 +35,6 @@ import {
|
||||
TNlpValueCount,
|
||||
} from '../schemas/nlp-value.schema';
|
||||
|
||||
import { NlpSampleEntityRepository } from './nlp-sample-entity.repository';
|
||||
|
||||
@Injectable()
|
||||
export class NlpValueRepository extends BaseRepository<
|
||||
NlpValue,
|
||||
@@ -44,10 +42,7 @@ export class NlpValueRepository extends BaseRepository<
|
||||
NlpValueFull,
|
||||
NlpValueDto
|
||||
> {
|
||||
constructor(
|
||||
@InjectModel(NlpValue.name) readonly model: Model<NlpValue>,
|
||||
private readonly nlpSampleEntityRepository: NlpSampleEntityRepository,
|
||||
) {
|
||||
constructor(@InjectModel(NlpValue.name) readonly model: Model<NlpValue>) {
|
||||
super(model, NlpValue, NLP_VALUE_POPULATE, NlpValueFull);
|
||||
}
|
||||
|
||||
@@ -85,41 +80,6 @@ export class NlpValueRepository extends BaseRepository<
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles deletion of NLP values and associated entities. If the criteria includes an ID,
|
||||
* emits an event for each deleted entity.
|
||||
*
|
||||
* @param _query - The query used to delete the NLP value(s).
|
||||
* @param criteria - The filter criteria used to identify the NLP value(s) to delete.
|
||||
*/
|
||||
async preDelete(
|
||||
_query: Query<
|
||||
DeleteResult,
|
||||
Document<NlpValue, any, any>,
|
||||
unknown,
|
||||
NlpValue,
|
||||
'deleteOne' | 'deleteMany'
|
||||
>,
|
||||
criteria: TFilterQuery<NlpValue>,
|
||||
): Promise<void> {
|
||||
if (criteria._id) {
|
||||
await this.nlpSampleEntityRepository.deleteMany({ value: criteria._id });
|
||||
|
||||
const entities = await this.find(
|
||||
typeof criteria === 'string' ? { _id: criteria } : criteria,
|
||||
);
|
||||
entities
|
||||
.filter((e) => !e.builtin)
|
||||
.map((e) => {
|
||||
this.eventEmitter.emit('hook:nlpValue:delete', e);
|
||||
});
|
||||
} else if (criteria.entity) {
|
||||
// Do nothing : cascading deletes coming from Nlp Sample Entity
|
||||
} else {
|
||||
throw new Error('Attempted to delete a NLP value using unknown criteria');
|
||||
}
|
||||
}
|
||||
|
||||
private getSortDirection(sortOrder: SortOrder) {
|
||||
return typeof sortOrder === 'number'
|
||||
? sortOrder
|
||||
|
||||
Reference in New Issue
Block a user