import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Post } from '@nestjs/common'; import { ApiOkResponse } from '@nestjs/swagger'; import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum'; import { Authenticated, RequireAllPermissions, } from 'src/decorators/authentication.decorator'; import { NetworkPoliciesDTO } from './dto/network-policy.dto'; import { RequestUser, User } from 'src/decorators/user.decorator'; import { NetworkPolicyService } from './network-policy.service'; import { PackTheMetadata } from 'src/utils/PackTheMetadata'; @Controller('network-policy') export class NetworkPolicyController { constructor(private networkPolicyService: NetworkPolicyService) {} @Get() @Authenticated() @RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN) @HttpCode(HttpStatus.OK) async getNetworks( @User() user: RequestUser, ) { return await this.networkPolicyService.getByCustomer( user.customer_id ); } @Post() @Authenticated() @RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN) @ApiOkResponse() @HttpCode(HttpStatus.CREATED) async applyNetworkPolicies( @User() user: RequestUser, @Body() data: NetworkPoliciesDTO, ) { const metadata = PackTheMetadata(user); return await this.networkPolicyService.apply( data.policies, user.customer_id, metadata, ); } @Delete() @Authenticated() @RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN) @ApiOkResponse() @HttpCode(HttpStatus.OK) async removeNetworkPolicies( @User() user: RequestUser, @Body() data: NetworkPoliciesDTO, ) { const metadata = PackTheMetadata(user); return await this.networkPolicyService.delete( data.policies, user.customer_id, metadata, ); } }