Files
dh-inspeccion-v2/api-v3/src/asset-master/assets.controller.ts
T

198 lines
6.4 KiB
TypeScript

import {
Body,
Controller,
Get,
Param,
ParseUUIDPipe,
Patch,
Post,
Query,
Req,
} from '@nestjs/common';
import { RequirePermissions } from '../authorization/decorators/require-permissions.decorator';
import { CurrentAuth } from '../auth/decorators/current-auth.decorator';
import type {
AuthPrincipal,
RequestWithContext,
} from '../common/http/request-context';
import { AssetsService } from './assets.service';
import { MergedInventoryDossierService } from './merged-inventory-dossier.service';
import { ChangeAssetStatusDto } from './dto/change-asset-status.dto';
import { ChangeAssetOperationalStatusDto } from './dto/change-asset-operational-status.dto';
import { CreateAssetDto } from './dto/create-asset.dto';
import { CreateFieldDiscoveryDto } from './dto/create-field-discovery.dto';
import { ListFieldDiscoveriesQueryDto } from './dto/list-field-discoveries-query.dto';
import { MatchFieldDiscoveryDto, RejectFieldDiscoveryDto, ReviewFieldDiscoveryDto } from './dto/review-field-discovery.dto';
import { ListAssetsQueryDto } from './dto/list-assets-query.dto';
import { ListAssetTreeQueryDto } from './dto/list-asset-tree-query.dto';
import { ListAssetTreeChildrenQueryDto } from './dto/list-asset-tree-children-query.dto';
import { ParentOptionsQueryDto } from './dto/parent-options-query.dto';
import { UpdateAssetDto } from './dto/update-asset.dto';
import { ChangeAssetContextDto } from './dto/change-asset-context.dto';
@Controller('assets')
export class AssetsController {
constructor(
private readonly assets: AssetsService,
private readonly mergedDossier: MergedInventoryDossierService,
) {}
@Get()
@RequirePermissions('assets.read')
list(@Query() query: ListAssetsQueryDto) {
return this.assets.list(query);
}
@Get('field-discoveries')
@RequirePermissions('assets.read')
listFieldDiscoveries(@Query() query: ListFieldDiscoveriesQueryDto) {
return this.assets.listFieldDiscoveries(query);
}
@Post('field-discoveries')
@RequirePermissions('assets.create')
createFieldDiscovery(
@Body() dto: CreateFieldDiscoveryDto,
@CurrentAuth() principal: AuthPrincipal,
@Req() request: RequestWithContext,
) {
return this.assets.createFieldDiscovery(dto, principal, request);
}
@Post('field-discoveries/:id/approve')
@RequirePermissions('assets.change_status')
approveFieldDiscovery(
@Param('id', new ParseUUIDPipe({ version: '4' })) id: string,
@Body() dto: ReviewFieldDiscoveryDto,
@CurrentAuth() principal: AuthPrincipal,
@Req() request: RequestWithContext,
) {
return this.assets.approveFieldDiscovery(id, dto, principal, request);
}
@Post('field-discoveries/:id/reject')
@RequirePermissions('assets.change_status')
rejectFieldDiscovery(
@Param('id', new ParseUUIDPipe({ version: '4' })) id: string,
@Body() dto: RejectFieldDiscoveryDto,
@CurrentAuth() principal: AuthPrincipal,
@Req() request: RequestWithContext,
) {
return this.assets.rejectFieldDiscovery(id, dto, principal, request);
}
@Post('field-discoveries/:id/match')
@RequirePermissions('assets.change_status')
matchFieldDiscovery(
@Param('id', new ParseUUIDPipe({ version: '4' })) id: string,
@Body() dto: MatchFieldDiscoveryDto,
@CurrentAuth() principal: AuthPrincipal,
@Req() request: RequestWithContext,
) {
return this.assets.matchFieldDiscovery(id, dto, principal, request);
}
@Get('tree')
@RequirePermissions('assets.read')
tree(@Query() query: ListAssetTreeQueryDto) {
return this.assets.tree(query);
}
@Get('tree-children')
@RequirePermissions('assets.read')
treeChildren(@Query() query: ListAssetTreeChildrenQueryDto) {
return this.assets.treeChildren(query);
}
@Get('parent-options')
@RequirePermissions('assets.read')
parentOptions(@Query() query: ParentOptionsQueryDto) {
return this.assets.parentOptions(query);
}
@Post()
@RequirePermissions('assets.create')
create(
@Body() dto: CreateAssetDto,
@CurrentAuth() principal: AuthPrincipal,
@Req() request: RequestWithContext,
) {
return this.assets.create(dto, principal, request);
}
@Get(':id/lineage')
@RequirePermissions('assets.read')
lineage(@Param('id', new ParseUUIDPipe({ version: '4' })) id: string) {
return this.assets.lineage(id);
}
@Get(':id/dossier')
@RequirePermissions(
'assets.read',
'inspections.read',
'inspection_acts.read',
'inspection_findings.read',
'inspection_evidence.read',
'inspection_communications.read',
)
dossier(@Param('id', new ParseUUIDPipe({ version: '4' })) id: string): Promise<unknown> {
return this.mergedDossier.dossier(id);
}
@Get(':id/context-history')
@RequirePermissions('assets.read_history')
contextHistory(@Param('id', new ParseUUIDPipe({ version: '4' })) id: string) {
return this.assets.contextHistory(id);
}
@Post(':id/context')
@RequirePermissions('assets.manage_context')
changeContext(
@Param('id', new ParseUUIDPipe({ version: '4' })) id: string,
@Body() dto: ChangeAssetContextDto,
@CurrentAuth() principal: AuthPrincipal,
@Req() request: RequestWithContext,
) {
return this.assets.changeContext(id, dto, principal, request);
}
@Get(':id')
@RequirePermissions('assets.read')
getById(@Param('id', new ParseUUIDPipe({ version: '4' })) id: string) {
return this.assets.getById(id);
}
@Patch(':id')
@RequirePermissions('assets.update')
update(
@Param('id', new ParseUUIDPipe({ version: '4' })) id: string,
@Body() dto: UpdateAssetDto,
@CurrentAuth() principal: AuthPrincipal,
@Req() request: RequestWithContext,
) {
return this.assets.update(id, dto, principal, request);
}
@Patch(':id/operational-status')
@RequirePermissions('assets.change_operational_status')
changeOperationalStatus(
@Param('id', new ParseUUIDPipe({ version: '4' })) id: string,
@Body() dto: ChangeAssetOperationalStatusDto,
@CurrentAuth() principal: AuthPrincipal,
@Req() request: RequestWithContext,
) {
return this.assets.changeOperationalStatus(id, dto, principal, request);
}
@Patch(':id/information-status')
@RequirePermissions('assets.change_status')
changeStatus(
@Param('id', new ParseUUIDPipe({ version: '4' })) id: string,
@Body() dto: ChangeAssetStatusDto,
@CurrentAuth() principal: AuthPrincipal,
@Req() request: RequestWithContext,
) {
return this.assets.changeStatus(id, dto, principal, request);
}
}