import { Controller, Patch, Body, UseGuards } from '@nestjs/common'; import { Crud, CrudController, Override, ParsedRequest, CrudRequest, } from '@nestjsx/crud'; import { Factory } from '../entities/factory.entity'; import { FactoryDto } from './factory.dto'; import { FactoriesService } from './factories.service'; import { JwtAuthGuard } from '../auth/jwt-auth.guard'; import { ApiBearerAuth, ApiTags, ApiHeader } from '@nestjs/swagger'; import { cleanupDtoList } from '../cleanup-dto-list'; import { FilterDeletedItemsInterceptor } from 'src/filter-deleted-items.interceptor'; @ApiTags('Factories') @ApiHeader({ name: 'Authorization', allowEmptyValue: false, description: '"Bearer Token"', example: 'Bearer ', }) @ApiBearerAuth() @Crud({ model: { type: Factory, }, routes: { exclude: ['replaceOneBase'], getOneBase: { interceptors: [FilterDeletedItemsInterceptor], }, getManyBase: { interceptors: [FilterDeletedItemsInterceptor], }, }, dto: { create: FactoryDto, update: FactoryDto, }, query: { filter: { deletedAt: { $eq: null, }, }, sort: [ { field: 'createdAt', order: 'ASC', }, ], join: { processes: { exclude: ['createdAt', 'updatedAt', 'version'], }, }, }, serialize: { create: FactoryDto, createMany: FactoryDto, get: FactoryDto, getMany: FactoryDto, update: FactoryDto, replace: FactoryDto, }, }) @UseGuards(JwtAuthGuard) @Controller('factories') export class FactoriesController implements CrudController { constructor(public service: FactoriesService) {} get base(): CrudController { return this; } @Override() async deleteOne(@ParsedRequest() req: CrudRequest) { const id = req.parsed.paramsFilter.find( f => f.field === 'id' && f.operator === '$eq', ).value; const res = await this.service.markDeleted(id); return res; } @Patch('bulk') async bulkUpdate( @Body() factories: Array>, ) { if (factories instanceof Array) { const fs = cleanupDtoList(FactoryDto, factories); await this.service.bulkUpdate(fs); } else { this.service.throwBadRequestException('send data as array'); } } }