import { Body, Controller, Get, Param, Patch, Post } from '@nestjs/common'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { RequirePermission } from '../auth/decorators/require-permission.decorator'; import { CurrentUser } from '../auth/decorators/current-user.decorator'; import type { AuthenticatedUser } from '../auth/types/authenticated-user'; import { CreateApiKeyDto } from './dto/create-api-key.dto'; import { UpdateApiKeyDto } from './dto/update-api-key.dto'; import { ApiKeySummary, ApiKeysService, CreatedApiKey, } from './api-keys.service'; @ApiTags('api-keys') @ApiBearerAuth() @Controller('api-keys') export class ApiKeysController { constructor(private readonly apiKeys: ApiKeysService) {} @RequirePermission('api-keys:manage') @Get() findAll(): Promise { return this.apiKeys.findAll(); } @RequirePermission('api-keys:manage') @Post() create( @Body() dto: CreateApiKeyDto, @CurrentUser() actor: AuthenticatedUser, ): Promise { return this.apiKeys.create(dto, actor.id); } @RequirePermission('api-keys:manage') @Patch(':id') updateAllowedIps( @Param('id') id: string, @Body() dto: UpdateApiKeyDto, @CurrentUser() actor: AuthenticatedUser, ): Promise { return this.apiKeys.updateAllowedIps(id, dto, actor.id); } @RequirePermission('api-keys:manage') @Post(':id/revoke') revoke( @Param('id') id: string, @CurrentUser() actor: AuthenticatedUser, ): Promise { return this.apiKeys.revoke(id, actor.id); } }