Return data or raise error in serverless controller (#14989)

as title
TODO validate we do not need to add a new column
This commit is contained in:
martmull
2025-10-08 19:09:25 +02:00
committed by GitHub
parent 3b992ed549
commit 920ad4c3f2
2 changed files with 38 additions and 8 deletions
@@ -6,60 +6,68 @@ import {
Post,
Put,
Req,
UseFilters,
UseGuards,
} from '@nestjs/common';
import { Request } from 'express';
import { RestApiExceptionFilter } from 'src/engine/api/rest/rest-api-exception.filter';
import { PublicEndpointGuard } from 'src/engine/guards/public-endpoint.guard';
import { HTTPMethod } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity';
import { RouteTriggerService } from 'src/engine/metadata-modules/route-trigger/route-trigger.service';
import { formatServerlessControllerResponse } from 'src/engine/metadata-modules/route-trigger/utils/format-serverless-controller-response';
@Controller('s')
@UseGuards(PublicEndpointGuard)
@UseFilters(RestApiExceptionFilter)
export class RouteTriggerController {
constructor(private readonly routeTriggerService: RouteTriggerService) {}
@Get('*')
async get(@Req() request: Request) {
return await this.routeTriggerService.handle({
const result = await this.routeTriggerService.handle({
request,
httpMethod: HTTPMethod.GET,
});
return formatServerlessControllerResponse(result);
}
@Post('*')
async post(@Req() request: Request) {
return await this.routeTriggerService.handle({
const result = await this.routeTriggerService.handle({
request,
httpMethod: HTTPMethod.POST,
});
return formatServerlessControllerResponse(result);
}
@Put('*')
async put(@Req() request: Request) {
return await this.routeTriggerService.handle({
const result = await this.routeTriggerService.handle({
request,
httpMethod: HTTPMethod.PUT,
});
return formatServerlessControllerResponse(result);
}
@Patch('*')
async patch(@Req() request: Request) {
return await this.routeTriggerService.handle({
const result = await this.routeTriggerService.handle({
request,
httpMethod: HTTPMethod.PATCH,
});
return formatServerlessControllerResponse(result);
}
@Delete('*')
async delete(@Req() request: Request) {
return await this.routeTriggerService.handle({
const result = await this.routeTriggerService.handle({
request,
httpMethod: HTTPMethod.DELETE,
});
return formatServerlessControllerResponse(result);
}
}
@@ -0,0 +1,22 @@
import { HttpException, HttpStatus } from '@nestjs/common';
import { isDefined } from 'twenty-shared/utils';
import { type ServerlessExecuteResult } from 'src/engine/core-modules/serverless/drivers/interfaces/serverless-driver.interface';
export const formatServerlessControllerResponse = (
result?: ServerlessExecuteResult | null,
) => {
if (!isDefined(result)) {
return result;
}
if (result.error) {
throw new HttpException(
{ errorType: result.error.errorType, message: result.error.errorMessage },
HttpStatus.INTERNAL_SERVER_ERROR,
);
}
return result.data;
};