Skip to content

Commit

Permalink
Fix serverless save when name empty (#6720)
Browse files Browse the repository at this point in the history
- fix serverless function error on save when name empty
- remove useless unique constraint on serverless function names
  • Loading branch information
martmull authored Aug 23, 2024
1 parent 5d8162d commit 873a4c1
Show file tree
Hide file tree
Showing 8 changed files with 38 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ describe('useServerlessFunctionUpdateFormState', () => {
},
);

const [formValues] = result.current;
const { formValues } = result.current;

expect(formValues).toEqual({ name: '', description: '', code: '' });
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@ type SetServerlessFunctionFormValues = Dispatch<

export const useServerlessFunctionUpdateFormState = (
serverlessFunctionId: string,
): [ServerlessFunctionFormValues, SetServerlessFunctionFormValues] => {
): {
formValues: ServerlessFunctionFormValues;
setFormValues: SetServerlessFunctionFormValues;
loading: boolean;
} => {
const [formValues, setFormValues] = useState<ServerlessFunctionFormValues>({
name: '',
description: '',
Expand All @@ -28,7 +32,7 @@ export const useServerlessFunctionUpdateFormState = (
const { serverlessFunction } =
useGetOneServerlessFunction(serverlessFunctionId);

useGetOneServerlessFunctionSourceCode({
const { loading } = useGetOneServerlessFunctionSourceCode({
id: serverlessFunctionId,
version: 'draft',
onCompleted: (data: FindOneServerlessFunctionSourceCodeQuery) => {
Expand All @@ -44,5 +48,5 @@ export const useServerlessFunctionUpdateFormState = (
},
});

return [formValues, setFormValues];
return { formValues, setFormValues, loading };
};
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import { isDefined } from '~/utils/isDefined';
import { useDebouncedCallback } from 'use-debounce';
import { useGetOneServerlessFunctionSourceCode } from '@/settings/serverless-functions/hooks/useGetOneServerlessFunctionSourceCode';
import { useState } from 'react';
import isEmpty from 'lodash.isempty';

const TAB_LIST_COMPONENT_ID = 'serverless-function-detail';

Expand All @@ -37,7 +38,7 @@ export const SettingsServerlessFunctionDetail = () => {
const { executeOneServerlessFunction } = useExecuteOneServerlessFunction();
const { updateOneServerlessFunction } = useUpdateOneServerlessFunction();
const { publishOneServerlessFunction } = usePublishOneServerlessFunction();
const [formValues, setFormValues] =
const { formValues, setFormValues, loading } =
useServerlessFunctionUpdateFormState(serverlessFunctionId);
const { code: latestVersionCode } = useGetOneServerlessFunctionSourceCode({
id: serverlessFunctionId,
Expand All @@ -52,6 +53,9 @@ export const SettingsServerlessFunctionDetail = () => {

const save = async () => {
try {
if (isEmpty(formValues.name)) {
return;
}
await updateOneServerlessFunction({
id: serverlessFunctionId,
name: formValues.name,
Expand Down Expand Up @@ -201,7 +205,7 @@ export const SettingsServerlessFunctionDetail = () => {
};

return (
formValues.name && (
!loading && (
<SubMenuTopBarContainer
Icon={IconFunction}
title={
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { MigrationInterface, QueryRunner } from 'typeorm';

export class RemoveServerlessFunctionUniqueConstraint1724423248330
implements MigrationInterface
{
name = 'RemoveServerlessFunctionUniqueConstraint1724423248330';

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "metadata"."serverlessFunction" DROP CONSTRAINT "IndexOnNameAndWorkspaceIdUnique"`,
);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "metadata"."serverlessFunction" ADD CONSTRAINT "IndexOnNameAndWorkspaceIdUnique" UNIQUE ("name", "workspaceId")`,
);
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* eslint-disable no-console */
import { join } from 'path';
import { tmpdir } from 'os';
import { promises as fs } from 'fs';
Expand Down Expand Up @@ -137,7 +138,7 @@ export class LocalDriver
});
}
child.kill();
fs.unlink(tmpFilePath);
fs.unlink(tmpFilePath).catch(console.error);
});

child.stderr?.on('data', (data) => {
Expand Down Expand Up @@ -169,19 +170,19 @@ export class LocalDriver
},
});
child.kill();
fs.unlink(tmpFilePath);
fs.unlink(tmpFilePath).catch(console.error);
});

child.on('error', (error) => {
reject(error);
child.kill();
fs.unlink(tmpFilePath);
fs.unlink(tmpFilePath).catch(console.error);
});

child.on('exit', (code) => {
if (code && code !== 0) {
reject(new Error(`Child process exited with code ${code}`));
fs.unlink(tmpFilePath);
fs.unlink(tmpFilePath).catch(console.error);
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ export class UpdateServerlessFunctionInput {
description?: string;

@IsString()
@IsNotEmpty()
@Field()
code: string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ export enum ServerlessFunctionRuntime {
}

@Entity('serverlessFunction')
@Unique('IndexOnNameAndWorkspaceIdUnique', ['name', 'workspaceId'])
export class ServerlessFunctionEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,18 +240,6 @@ export class ServerlessFunctionService extends TypeOrmQueryService<ServerlessFun
code: FileUpload | string,
workspaceId: string,
) {
const existingServerlessFunction =
await this.serverlessFunctionRepository.findOne({
where: { name: serverlessFunctionInput.name, workspaceId },
});

if (existingServerlessFunction) {
throw new ServerlessFunctionException(
`Function already exists`,
ServerlessFunctionExceptionCode.SERVERLESS_FUNCTION_ALREADY_EXIST,
);
}

let typescriptCode: string;

if (typeof code === 'string') {
Expand Down

0 comments on commit 873a4c1

Please sign in to comment.