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 { AssetRegistryService } from './asset-registry.service'; import { AddAreaLegalRightOrganizationDto } from './dto/add-area-legal-right-organization.dto'; import { AddOrganizationMembershipDto } from './dto/add-organization-membership.dto'; import { CreateAreaLegalRightDto } from './dto/create-area-legal-right.dto'; import { CreateExternalIdentifierDto } from './dto/create-external-identifier.dto'; import { CreateSourceDocumentDto } from './dto/create-source-document.dto'; import { EndAreaLegalRightOrganizationDto } from './dto/end-area-legal-right-organization.dto'; import { EndExternalIdentifierDto } from './dto/end-external-identifier.dto'; import { EndOrganizationMembershipDto } from './dto/end-organization-membership.dto'; import { LinkAssetSourceDocumentDto } from './dto/link-asset-source-document.dto'; import { UpdateAreaLegalRightDto } from './dto/update-area-legal-right.dto'; import { UpsertOrganizationProfileDto } from './dto/upsert-organization-profile.dto'; @Controller() export class AssetRegistryController { constructor(private readonly registry: AssetRegistryService) {} @Get('assets/:assetId/registry') @RequirePermissions('asset_registry.read') get(@Param('assetId',new ParseUUIDPipe({version:'4'})) assetId:string){ return this.registry.get(assetId); } @Get('source-documents') @RequirePermissions('asset_registry.read') documents(@Query('search') search?:string){ return this.registry.listSourceDocuments(search); } @Post('source-documents') @RequirePermissions('asset_registry.manage') createDocument(@Body() dto:CreateSourceDocumentDto,@CurrentAuth() principal:AuthPrincipal,@Req() request:RequestWithContext){ return this.registry.createSourceDocument(dto,principal,request); } @Patch('assets/:assetId/organization-profile') @RequirePermissions('asset_registry.manage') profile(@Param('assetId',new ParseUUIDPipe({version:'4'})) assetId:string,@Body() dto:UpsertOrganizationProfileDto,@CurrentAuth() principal:AuthPrincipal,@Req() request:RequestWithContext){ return this.registry.upsertOrganizationProfile(assetId,dto,principal,request); } @Post('organizations/:organizationId/memberships') @RequirePermissions('asset_registry.manage') addMembership(@Param('organizationId',new ParseUUIDPipe({version:'4'})) id:string,@Body() dto:AddOrganizationMembershipDto,@CurrentAuth() p:AuthPrincipal,@Req() r:RequestWithContext){ return this.registry.addOrganizationMembership(id,dto,p,r); } @Post('organization-memberships/:id/end') @RequirePermissions('asset_registry.manage') endMembership(@Param('id',new ParseUUIDPipe({version:'4'})) id:string,@Body() dto:EndOrganizationMembershipDto,@CurrentAuth() p:AuthPrincipal,@Req() r:RequestWithContext){ return this.registry.endOrganizationMembership(id,dto,p,r); } @Post('assets/:assetId/source-documents/:documentId') @RequirePermissions('asset_registry.manage') link(@Param('assetId',new ParseUUIDPipe({version:'4'})) assetId:string,@Param('documentId',new ParseUUIDPipe({version:'4'})) documentId:string,@Body() dto:LinkAssetSourceDocumentDto,@CurrentAuth() p:AuthPrincipal,@Req() r:RequestWithContext){ return this.registry.linkDocument(assetId,documentId,dto,p,r); } @Post('assets/:assetId/external-identifiers') @RequirePermissions('asset_registry.manage') identifier(@Param('assetId',new ParseUUIDPipe({version:'4'})) assetId:string,@Body() dto:CreateExternalIdentifierDto,@CurrentAuth() p:AuthPrincipal,@Req() r:RequestWithContext){ return this.registry.addExternalIdentifier(assetId,dto,p,r); } @Post('asset-external-identifiers/:id/end') @RequirePermissions('asset_registry.manage') endIdentifier(@Param('id',new ParseUUIDPipe({version:'4'})) id:string,@Body() dto:EndExternalIdentifierDto,@CurrentAuth() p:AuthPrincipal,@Req() r:RequestWithContext){ return this.registry.endExternalIdentifier(id,dto,p,r); } @Post('areas/:areaId/legal-rights') @RequirePermissions('asset_registry.manage') legalRight(@Param('areaId',new ParseUUIDPipe({version:'4'})) areaId:string,@Body() dto:CreateAreaLegalRightDto,@CurrentAuth() p:AuthPrincipal,@Req() r:RequestWithContext){ return this.registry.createLegalRight(areaId,dto,p,r); } @Patch('area-legal-rights/:rightId') @RequirePermissions('asset_registry.manage') updateRight(@Param('rightId',new ParseUUIDPipe({version:'4'})) id:string,@Body() dto:UpdateAreaLegalRightDto,@CurrentAuth() p:AuthPrincipal,@Req() r:RequestWithContext){ return this.registry.updateLegalRight(id,dto,p,r); } @Post('area-legal-rights/:rightId/organizations') @RequirePermissions('asset_registry.manage') rightOrg(@Param('rightId',new ParseUUIDPipe({version:'4'})) id:string,@Body() dto:AddAreaLegalRightOrganizationDto,@CurrentAuth() p:AuthPrincipal,@Req() r:RequestWithContext){ return this.registry.addLegalRightOrganization(id,dto,p,r); } @Post('area-legal-right-organizations/:id/end') @RequirePermissions('asset_registry.manage') endRightOrg(@Param('id',new ParseUUIDPipe({version:'4'})) id:string,@Body() dto:EndAreaLegalRightOrganizationDto,@CurrentAuth() p:AuthPrincipal,@Req() r:RequestWithContext){ return this.registry.endLegalRightOrganization(id,dto,p,r); } }