Files
twenty/packages/twenty-server/src/modules/dashboard/query-hooks/dashboard-create-one.pre-query.hook.ts
T

46 lines
1.9 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { assertIsDefinedOrThrow, isDefined } from 'twenty-shared/utils';
import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
import { type CreateOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
import { DashboardToPageLayoutSyncService } from 'src/modules/dashboard/services/dashboard-to-page-layout-sync.service';
import { type DashboardWorkspaceEntity } from 'src/modules/dashboard/standard-objects/dashboard.workspace-entity';
@Injectable()
@WorkspaceQueryHook(`dashboard.createOne`)
export class DashboardCreateOnePreQueryHook
implements WorkspacePreQueryHookInstance
{
constructor(
private readonly dashboardToPageLayoutSyncService: DashboardToPageLayoutSyncService,
) {}
async execute(
authContext: WorkspaceAuthContext,
_objectName: string,
payload: CreateOneResolverArgs<DashboardWorkspaceEntity>,
): Promise<CreateOneResolverArgs<DashboardWorkspaceEntity>> {
const workspace = authContext.workspace;
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
if (isDefined(payload.data.pageLayoutId)) {
return payload;
}
const pageLayoutId =
await this.dashboardToPageLayoutSyncService.createPageLayoutForDashboard({
workspaceId: workspace.id,
});
payload.data.pageLayoutId = pageLayoutId;
return payload;
}
}