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, ): Promise> { 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; } }