import { Inject, Injectable } from '@nestjs/common';
import { DatabaseName } from '@domain/value-objects/database-name.vo';
import { CollectionName } from '@domain/value-objects/collection-name.vo';
import { QueryResultEntity } from '@domain/entities/query-result.entity';
import {
IMongodbRepository,
MONGODB_REPOSITORY,
} from '@domain/repositories/mongodb.repository.interface';
import { FindDocumentsDto } from './find-documents.dto';
@Injectable()
export class FindDocumentsUseCase {
constructor(
@Inject(MONGODB_REPOSITORY)
private readonly mongoRepository: IMongodbRepository,
) {}
async execute(dto: FindDocumentsDto): Promise<QueryResultEntity> {
const dbName = new DatabaseName(dto.database);
const collName = new CollectionName(dto.collection);
const documents = await this.mongoRepository.find(
dbName,
collName,
dto.filter,
dto.projection,
dto.limit,
dto.sort,
);
return new QueryResultEntity(documents, documents.length);
}
}