From 92c27b337ae367ac6c440afb96ac89aa08adebf5 Mon Sep 17 00:00:00 2001 From: Charles Bochet Date: Tue, 2 Sep 2025 15:07:15 +0200 Subject: [PATCH] Fix view creation (#14254) --- .../view/resolvers/view.resolver.ts | 66 +++++++++++++++++++ .../view/services/view.service.ts | 3 +- .../messaging-message-list-fetch.cron.job.ts | 2 +- 3 files changed, 69 insertions(+), 2 deletions(-) diff --git a/packages/twenty-server/src/engine/core-modules/view/resolvers/view.resolver.ts b/packages/twenty-server/src/engine/core-modules/view/resolvers/view.resolver.ts index e6a3ee63ff..8ebf0bacf6 100644 --- a/packages/twenty-server/src/engine/core-modules/view/resolvers/view.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/view/resolvers/view.resolver.ts @@ -9,6 +9,7 @@ import { Resolver, } from '@nestjs/graphql'; +import { isArray } from '@sniptt/guards'; import { isDefined } from 'twenty-shared/utils'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; @@ -16,6 +17,11 @@ import { type I18nContext } from 'src/engine/core-modules/i18n/types/i18n-contex import { generateMessageId } from 'src/engine/core-modules/i18n/utils/generateMessageId'; import { CreateViewInput } from 'src/engine/core-modules/view/dtos/inputs/create-view.input'; import { UpdateViewInput } from 'src/engine/core-modules/view/dtos/inputs/update-view.input'; +import { ViewFieldDTO } from 'src/engine/core-modules/view/dtos/view-field.dto'; +import { ViewFilterGroupDTO } from 'src/engine/core-modules/view/dtos/view-filter-group.dto'; +import { ViewFilterDTO } from 'src/engine/core-modules/view/dtos/view-filter.dto'; +import { ViewGroupDTO } from 'src/engine/core-modules/view/dtos/view-group.dto'; +import { ViewSortDTO } from 'src/engine/core-modules/view/dtos/view-sort.dto'; import { ViewDTO } from 'src/engine/core-modules/view/dtos/view.dto'; import { ViewFieldService } from 'src/engine/core-modules/view/services/view-field.service'; import { ViewFilterGroupService } from 'src/engine/core-modules/view/services/view-filter-group.service'; @@ -163,4 +169,64 @@ export class ViewResolver { return isDefined(deletedView); } + + @ResolveField(() => [ViewFieldDTO]) + async viewFields( + @Parent() view: ViewDTO, + @AuthWorkspace() workspace: Workspace, + ) { + if (isArray(view.viewFields)) { + return view.viewFields; + } + + return this.viewFieldService.findByViewId(workspace.id, view.id); + } + + @ResolveField(() => [ViewFilterDTO]) + async viewFilters( + @Parent() view: ViewDTO, + @AuthWorkspace() workspace: Workspace, + ) { + if (isArray(view.viewFilters)) { + return view.viewFilters; + } + + return this.viewFilterService.findByViewId(workspace.id, view.id); + } + + @ResolveField(() => [ViewFilterGroupDTO]) + async viewFilterGroups( + @Parent() view: ViewDTO, + @AuthWorkspace() workspace: Workspace, + ) { + if (isArray(view.viewFilterGroups)) { + return view.viewFilterGroups; + } + + return this.viewFilterGroupService.findByViewId(workspace.id, view.id); + } + + @ResolveField(() => [ViewSortDTO]) + async viewSorts( + @Parent() view: ViewDTO, + @AuthWorkspace() workspace: Workspace, + ) { + if (isArray(view.viewSorts)) { + return view.viewSorts; + } + + return this.viewSortService.findByViewId(workspace.id, view.id); + } + + @ResolveField(() => [ViewGroupDTO]) + async viewGroups( + @Parent() view: ViewDTO, + @AuthWorkspace() workspace: Workspace, + ) { + if (isArray(view.viewGroups)) { + return view.viewGroups; + } + + return this.viewGroupService.findByViewId(workspace.id, view.id); + } } diff --git a/packages/twenty-server/src/engine/core-modules/view/services/view.service.ts b/packages/twenty-server/src/engine/core-modules/view/services/view.service.ts index 1ec011aa8f..913a32f2ad 100644 --- a/packages/twenty-server/src/engine/core-modules/view/services/view.service.ts +++ b/packages/twenty-server/src/engine/core-modules/view/services/view.service.ts @@ -12,6 +12,7 @@ import { generateViewExceptionMessage, generateViewUserFriendlyExceptionMessage, } from 'src/engine/core-modules/view/exceptions/view.exception'; +import { ViewDTO } from 'src/engine/core-modules/view/dtos/view.dto'; @Injectable() export class ViewService { @@ -80,7 +81,7 @@ export class ViewService { return view || null; } - async create(viewData: Partial): Promise { + async create(viewData: Partial): Promise { if (!isDefined(viewData.workspaceId)) { throw new ViewException( generateViewExceptionMessage( diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-message-list-fetch.cron.job.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-message-list-fetch.cron.job.ts index 56236f0fce..b3301d79e9 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-message-list-fetch.cron.job.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-message-list-fetch.cron.job.ts @@ -18,7 +18,7 @@ import { type MessagingMessageListFetchJobData, } from 'src/modules/messaging/message-import-manager/jobs/messaging-message-list-fetch.job'; -export const MESSAGING_MESSAGE_LIST_FETCH_CRON_PATTERN = '*/2 * * * *'; +export const MESSAGING_MESSAGE_LIST_FETCH_CRON_PATTERN = '*/5 * * * *'; @Processor(MessageQueue.cronQueue) export class MessagingMessageListFetchCronJob {