import { Body, Controller, Delete, Get, Inject, Param, Patch, Post } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { AuditAction } from '../audit/audit.metadata.js'; import { CurrentUserParam, RequirePermissions, type CurrentUser } from '../security/security.metadata.js'; import { CustomerGatewayPoliciesService } from './customer-gateway-policies.service.js'; @ApiTags('customer-gateway-policies') @Controller() export class CustomerGatewayPoliciesController { constructor(@Inject(CustomerGatewayPoliciesService) private readonly policiesService: CustomerGatewayPoliciesService) {} @Get('customer-gateways/:id/policies') @RequirePermissions('customer_gateways.view') list(@Param('id') gatewayId: string) { return this.policiesService.list(gatewayId); } @Post('customer-gateways/:id/policies') @RequirePermissions('customer_gateways.manage') @AuditAction({ module: 'customer_gateways', action: 'policy_create', objectType: 'customer_gateway', objectIdParam: 'id' }) create(@Param('id') gatewayId: string, @Body() body: unknown, @CurrentUserParam() currentUser?: CurrentUser) { return this.policiesService.create(gatewayId, body as never, currentUser?.id); } @Patch('customer-gateway-policies/:id') @RequirePermissions('customer_gateways.manage') @AuditAction({ module: 'customer_gateways', action: 'policy_update', objectType: 'customer_gateway_policy', objectIdParam: 'id' }) update(@Param('id') policyId: string, @Body() body: unknown, @CurrentUserParam() currentUser?: CurrentUser) { return this.policiesService.update(policyId, body as never, currentUser?.id); } @Delete('customer-gateway-policies/:id') @RequirePermissions('customer_gateways.manage') @AuditAction({ module: 'customer_gateways', action: 'policy_delete', objectType: 'customer_gateway_policy', objectIdParam: 'id' }) remove(@Param('id') policyId: string, @CurrentUserParam() currentUser?: CurrentUser) { return this.policiesService.remove(policyId, currentUser?.id); } @Post('customer-gateways/:id/policies/reorder') @RequirePermissions('customer_gateways.manage') @AuditAction({ module: 'customer_gateways', action: 'policy_reorder', objectType: 'customer_gateway', objectIdParam: 'id' }) reorder(@Param('id') gatewayId: string, @Body() body: unknown, @CurrentUserParam() currentUser?: CurrentUser) { return this.policiesService.reorder(gatewayId, body as never, currentUser?.id); } }