import { Body, Controller, Get, Param, Post } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { CurrentSessionUserId } from '../auth/current-session-user.decorator'; import { CurrentTenantId } from '../auth/current-tenant-id.decorator'; import { RequireRecentAuthentication } from '../auth/require-recent-authentication.decorator'; import { DeleteTargetDto, DeletionGovernanceService, DeletionTargetType } from './deletion-governance.service'; @ApiTags('deletion-governance') @Controller('admin/deletions') export class AdminDeletionGovernanceController { constructor(private readonly deletions: DeletionGovernanceService) {} @Get(':type/:id/preflight') preflight(@Param('type') type: DeletionTargetType, @Param('id') id: string) { return this.deletions.preflight(type, id); } @Post(':type/:id') @RequireRecentAuthentication() delete(@Param('type') type: DeletionTargetType, @Param('id') id: string, @Body() body: DeleteTargetDto, @CurrentSessionUserId() operatorId?: string) { return this.deletions.delete(type, id, { ...body, operatorId }); } } @ApiTags('client-deletion-governance') @Controller('client/deletions') export class ClientDeletionGovernanceController { constructor(private readonly deletions: DeletionGovernanceService) {} @Get(':type/:id/preflight') preflight(@Param('type') type: DeletionTargetType, @Param('id') id: string, @CurrentTenantId() tenantId: string) { return this.deletions.preflight(type, id, tenantId); } @Post(':type/:id') @RequireRecentAuthentication() delete(@Param('type') type: DeletionTargetType, @Param('id') id: string, @Body() body: DeleteTargetDto, @CurrentTenantId() tenantId: string, @CurrentSessionUserId() operatorId?: string) { return this.deletions.delete(type, id, { ...body, operatorId }, tenantId); } }