import { Body, Controller, Headers, Post, RawBody, } from '@nestjs/common'; import { ApiCreatedResponse, ApiTags } from '@nestjs/swagger'; import { GiteaWebhookHeaders, GiteaWebhookResult } from './gitea-webhook.types'; import { GiteaWebhookService } from './gitea-webhook.service'; @ApiTags('webhooks') @Controller('webhooks/gitea') export class GiteaWebhookController { constructor(private readonly giteaWebhookService: GiteaWebhookService) {} @Post() @ApiCreatedResponse({ description: 'Receive a Gitea webhook event.' }) async receiveWebhook( @Headers('x-gitea-event') event: string | undefined, @Headers('x-gitea-delivery') delivery: string | undefined, @Headers('x-gitea-signature') signature: string | undefined, @Headers('x-hub-signature-256') hubSignature256: string | undefined, @Body() payload: unknown, @RawBody() rawBody?: Buffer, ): Promise { const headers: GiteaWebhookHeaders = { event, delivery, signature, hubSignature256, }; return this.giteaWebhookService.handleWebhook({ headers, payload, rawBody, }); } }