Files
twenty_crm/server/src/metadata/object-metadata/hooks/before-create-one-object.hook.ts
Jérémy M 9df83c9a5a feat: better server lint (#2850)
* feat: add stylistic eslint plugin

* feat: add missing line return

* feat: secure line-break style

* feat: disallow break before else

* feat: line between class members

* feat: better new line lint rule
2023-12-06 12:19:00 +01:00

43 lines
1.0 KiB
TypeScript

import {
ForbiddenException,
Injectable,
UnauthorizedException,
} from '@nestjs/common';
import {
BeforeCreateOneHook,
CreateOneInputType,
} from '@ptc-org/nestjs-query-graphql';
import { CreateObjectInput } from 'src/metadata/object-metadata/dtos/create-object.input';
const coreObjectNames = ['featureFlag', 'refreshToken', 'workspace', 'user'];
@Injectable()
export class BeforeCreateOneObject<T extends CreateObjectInput>
implements BeforeCreateOneHook<T, any>
{
async run(
instance: CreateOneInputType<T>,
context: any,
): Promise<CreateOneInputType<T>> {
const workspaceId = context?.req?.user?.workspace?.id;
if (!workspaceId) {
throw new UnauthorizedException();
}
if (
coreObjectNames.includes(instance.input.nameSingular) ||
coreObjectNames.includes(instance.input.namePlural)
) {
throw new ForbiddenException(
'You cannot create an object with this name.',
);
}
instance.input.workspaceId = workspaceId;
return instance;
}
}