import { Injectable } from '@nestjs/common'; import { TypeOrmCrudService } from '@nestjsx/crud-typeorm'; import { Factory } from '../entities/factory.entity'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository, Transaction, TransactionRepository } from 'typeorm'; import { FactoryDto } from './factory.dto'; @Injectable() export class FactoriesService extends TypeOrmCrudService { constructor( @InjectRepository(Factory) public factoriesRepository: Repository, ) { super(factoriesRepository); } async markDeleted(id: number) { await this.factoriesRepository.softDelete({ id }); return; } @Transaction() async bulkUpdate( data: Array>, @TransactionRepository(Factory) fr?: Repository, ) { const hasUpdatesWithoutId = !!data.find(d => !('id' in d)); if (hasUpdatesWithoutId) return this.throwBadRequestException('id is required'); const ops = data .map(f => { const change = Object.keys(f).reduce((c, key) => { if (f[key] !== undefined) { c[key] = f[key]; } return c; }, {}); return fr.update(f.id, change); }) .filter(r => r instanceof Promise); return await Promise.all(ops); } }