import { Controller, Get, Post, Put, Delete, Body, Param, UseGuards, Query } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiResponse, ApiBearerAuth } from '@nestjs/swagger'; import { UserService } from '../../service/user.service'; import { JwtAuthGuard } from '../../../auth/jwt-auth.guard'; import { BaseCrudController, Permissions, PermissionsGuard } from '@devstroupe/devkit-nest'; import { User } from '../../domain/user'; @ApiTags('users') @Controller('user') @UseGuards(JwtAuthGuard, PermissionsGuard) @ApiBearerAuth() export class UserController extends BaseCrudController { constructor(private readonly userService: UserService) { super(userService); } @Get() @Permissions('read:user') @ApiOperation({ summary: 'Listar usuários com filtros e paginação' }) @ApiResponse({ status: 200, description: 'Usuários listados com sucesso.' }) override async findMany(@Query() query: any): Promise { return super.findMany(query); } @Get(':id') @Permissions('read:user') @ApiOperation({ summary: 'Obter um usuário pelo ID' }) override async findById(@Param('id') id: string): Promise { return super.findById(id); } @Post() @Permissions('create:user') @ApiOperation({ summary: 'Criar um novo usuário' }) override async create(@Body() body: any): Promise { return super.create(body); } @Put(':id') @Permissions('update:user') @ApiOperation({ summary: 'Atualizar dados de um usuário' }) override async update(@Param('id') id: string, @Body() body: any): Promise { return super.update(id, body); } @Delete(':id') @Permissions('delete:user') @ApiOperation({ summary: 'Excluir um usuário' }) override async delete(@Param('id') id: string): Promise { return super.delete(id); } }