import { Controller, UseGuards, Body } from '@nestjs/common'; import { Crud, CrudController, CrudRequest, ParsedRequest, Override, } from '@nestjsx/crud'; import { User } from '../entities/user.entity'; import { UsersService } from './users.service'; import { PasswordToHashInterceptor } from './password-to-hash.interceptor'; import { UserDto } from './user.dto'; import { JwtAuthGuard } from '../auth/jwt-auth.guard'; import { ApiBearerAuth, ApiHeader, ApiTags } from '@nestjs/swagger'; @ApiTags('Users') @ApiHeader({ name: 'Authorization', allowEmptyValue: false, description: '"Bearer Token"', example: 'Bearer ', }) @ApiBearerAuth() @Crud({ model: { type: User, }, routes: { exclude: ['replaceOneBase', 'createManyBase'], createOneBase: { interceptors: [PasswordToHashInterceptor], }, updateOneBase: { interceptors: [PasswordToHashInterceptor], }, replaceOneBase: { interceptors: [PasswordToHashInterceptor], }, }, dto: { create: UserDto, update: UserDto, }, query: { filter: { deletedAt: { $eq: null, }, }, sort: [ { field: 'createdAt', order: 'ASC', }, ], }, serialize: { create: UserDto, createMany: UserDto, get: UserDto, getMany: UserDto, update: UserDto, replace: UserDto, }, }) @UseGuards(JwtAuthGuard) @Controller('users') export class UsersController implements CrudController { constructor(public service: UsersService) {} get base(): CrudController { return this; } @Override() async createOne(@ParsedRequest() req: CrudRequest, @Body() user: UserDto) { return await this.service.registerUser(req, user); } @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; } }