import { ResourceNotFoundException } from '@nestjs.pro/common/dist/exceptions/ResourceNotFoundException'; import { Body, Controller, Delete, Get, Param, Post, UseGuards } from '@nestjs/common'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { Application } from '@tco.ai/models/dist/RBAC/Application'; import { User } from '@tco.ai/models/dist/RBAC/User'; import { Principal } from '../types/Principal'; import { PrincipalGuard } from '../types/PrincipalGuard'; import { ApplicationsService } from './ApplicationsService'; @ApiBearerAuth() @ApiTags('Applications') // @UseInterceptors(ElasticsearchRequestInterceptor) @Controller('/applications') export class ApplicationsController { private readonly applicationsService: ApplicationsService; public constructor(applicationsService: ApplicationsService) { this.applicationsService = applicationsService; } @Post() @UseGuards(PrincipalGuard) // @UseGuards(PrincipalGuard, PermissionsGuard) // @HasPermissions('rbac.organizations.create') public create(@Principal() user: User, @Body() applicationCreate: Application): Promise { return this.applicationsService.create(user.organization, applicationCreate); } /** * Retrieve all applications belonging to an organization. * * @param {User} user * * @return {Promise>} */ @Get() @UseGuards(PrincipalGuard) public getByOrganization(@Principal() user: User): Promise> { return this.applicationsService.getByOrganization(user.organization); } @Get('/:id') @UseGuards(PrincipalGuard) public getByOrganizationAndId(@Principal() user: User, @Param('id') id: string): Promise { return this.applicationsService.getByOrganizationAndId(user.organization, id); } @Delete('/:id') @UseGuards(PrincipalGuard) public async deleteByOrganizationAndId(@Principal() user: User, @Param('id') id: string): Promise { const result = await this.applicationsService.deleteByOrganizationAndId(user.organization, id); if (!result) { throw new ResourceNotFoundException('no matching resources'); } else { return true; } } }