Closes #6181 ## Testing - download Altair graphql dev tool https://altairgraphql.dev/#download - create a file locally `test.ts` containing: ``` export const handler = async (event: object, context: object) => { return { test: 'toto', data: event['data'] }; } ``` - play those requests in Altair: mutation UpsertFunction($file: Upload!) { upsertFunction(name: "toto", file: $file) } mutation ExecFunction { executeFunction(name:"toto", payload: {data: "titi"}) } - it will run the local driver, add those env variable to test with lambda driver ``` CUSTOM_CODE_ENGINE_DRIVER_TYPE=lambda LAMBDA_REGION=eu-west-2 LAMBDA_ROLE=<ASK_ME> ```
60 lines
2.3 KiB
TypeScript
60 lines
2.3 KiB
TypeScript
import { UseGuards } from '@nestjs/common';
|
|
import { Args, Mutation, Resolver } from '@nestjs/graphql';
|
|
|
|
import { FileUpload, GraphQLUpload } from 'graphql-upload';
|
|
|
|
import { JwtAuthGuard } from 'src/engine/guards/jwt.auth.guard';
|
|
import { ServerlessFunctionService } from 'src/engine/metadata-modules/serverless-function/serverless-function.service';
|
|
import { ExecuteServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/execute-serverless-function.input';
|
|
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
|
|
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
|
import { ServerlessFunctionDto } from 'src/engine/metadata-modules/serverless-function/dtos/serverless-function.dto';
|
|
import { ServerlessFunctionExecutionResultDTO } from 'src/engine/metadata-modules/serverless-function/dtos/serverless-function-execution-result-d-t.o';
|
|
import { serverlessFunctionGraphQLApiExceptionHandler } from 'src/engine/metadata-modules/serverless-function/utils/serverless-function-graphql-api-exception-handler.utils';
|
|
|
|
@UseGuards(JwtAuthGuard)
|
|
@Resolver()
|
|
export class ServerlessFunctionResolver {
|
|
constructor(
|
|
private readonly serverlessFunctionService: ServerlessFunctionService,
|
|
) {}
|
|
|
|
@Mutation(() => ServerlessFunctionDto)
|
|
async createOneServerlessFunction(
|
|
@Args({ name: 'file', type: () => GraphQLUpload })
|
|
file: FileUpload,
|
|
@Args('name', { type: () => String }) name: string,
|
|
@AuthWorkspace() { id: workspaceId }: Workspace,
|
|
) {
|
|
try {
|
|
return await this.serverlessFunctionService.createOne(
|
|
name,
|
|
workspaceId,
|
|
file,
|
|
);
|
|
} catch (error) {
|
|
serverlessFunctionGraphQLApiExceptionHandler(error);
|
|
}
|
|
}
|
|
|
|
@Mutation(() => ServerlessFunctionExecutionResultDTO)
|
|
async executeOneServerlessFunction(
|
|
@Args() executeServerlessFunctionInput: ExecuteServerlessFunctionInput,
|
|
@AuthWorkspace() { id: workspaceId }: Workspace,
|
|
) {
|
|
try {
|
|
const { name, payload } = executeServerlessFunctionInput;
|
|
|
|
return {
|
|
result: await this.serverlessFunctionService.executeOne(
|
|
name,
|
|
workspaceId,
|
|
payload,
|
|
),
|
|
};
|
|
} catch (error) {
|
|
serverlessFunctionGraphQLApiExceptionHandler(error);
|
|
}
|
|
}
|
|
}
|