import { Body, Controller, Delete, Get, Param, Patch, Post, Req, UseGuards } from '@nestjs/common'; import type { Request } from 'express'; import type { AuthUser } from '../auth/auth.types'; import { CurrentUser } from '../auth/decorators/current-user.decorator'; import { Roles } from '../auth/decorators/roles.decorator'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; import { RolesGuard } from '../auth/guards/roles.guard'; import { CustomersService } from './customers.service'; import { UpsertCustomerDto } from './dto/upsert-customer.dto'; @Controller('customers') @UseGuards(JwtAuthGuard, RolesGuard) export class CustomersController { constructor(private readonly customers: CustomersService) {} @Get() @Roles('ADMIN', 'MANAGER', 'OPERATOR') list(@CurrentUser() user: AuthUser) { return this.customers.list(user); } @Post() @Roles('ADMIN', 'MANAGER') create(@CurrentUser() user: AuthUser, @Body() dto: UpsertCustomerDto, @Req() request: Request) { return this.customers.create(user, dto, request.ip); } @Patch(':id') @Roles('ADMIN', 'MANAGER') update( @CurrentUser() user: AuthUser, @Param('id') id: string, @Body() dto: UpsertCustomerDto, @Req() request: Request, ) { return this.customers.update(user, id, dto, request.ip); } @Delete(':id') @Roles('ADMIN', 'MANAGER') remove(@CurrentUser() user: AuthUser, @Param('id') id: string, @Req() request: Request) { return this.customers.remove(user, id, request.ip); } }