From f5120493816b8cd78f7d0f7393e91f478ae18c4a Mon Sep 17 00:00:00 2001 From: Weiko Date: Tue, 30 Apr 2024 15:01:22 +0200 Subject: [PATCH] [messaging/calendar] cron jobs can run regardless of sub status if billing is disabled (#5218) ## Context Messaging and calendar cron jobs are only working for workspace that have sub status different than incomplete, this is because currently this is the simplest way to know if a user is onboarded. This should not be the source of truth and this will be updated in a later version. In the meantime, to make self-hosting easier, we are adding an extra check on IS_BILLING_ENABLED env var since sub status is not relevant for people not using billing. --- .../crons/jobs/google-calendar-sync.cron.job.ts | 10 +++++++--- .../jobs/gmail-fetch-messages-from-cache.cron.job.ts | 10 +++++++--- .../crons/jobs/gmail-partial-sync.cron.job.ts | 10 +++++++--- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/packages/twenty-server/src/modules/calendar/crons/jobs/google-calendar-sync.cron.job.ts b/packages/twenty-server/src/modules/calendar/crons/jobs/google-calendar-sync.cron.job.ts index 7b6af10f2..90d74b227 100644 --- a/packages/twenty-server/src/modules/calendar/crons/jobs/google-calendar-sync.cron.job.ts +++ b/packages/twenty-server/src/modules/calendar/crons/jobs/google-calendar-sync.cron.job.ts @@ -12,6 +12,7 @@ import { import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { WorkspaceGoogleCalendarSyncService } from 'src/modules/calendar/services/workspace-google-calendar-sync/workspace-google-calendar-sync.service'; +import { EnvironmentService } from 'src/engine/integrations/environment/environment.service'; @Injectable() export class GoogleCalendarSyncCronJob implements MessageQueueJob { @@ -23,14 +24,17 @@ export class GoogleCalendarSyncCronJob implements MessageQueueJob { @InjectRepository(FeatureFlagEntity, 'core') private readonly featureFlagRepository: Repository, private readonly workspaceGoogleCalendarSyncService: WorkspaceGoogleCalendarSyncService, + private readonly environmentService: EnvironmentService, ) {} async handle(): Promise { const workspaceIds = ( await this.workspaceRepository.find({ - where: { - subscriptionStatus: In(['active', 'trialing', 'past_due']), - }, + where: this.environmentService.get('IS_BILLING_ENABLED') + ? { + subscriptionStatus: In(['active', 'trialing', 'past_due']), + } + : {}, select: ['id'], }) ).map((workspace) => workspace.id); diff --git a/packages/twenty-server/src/modules/messaging/crons/jobs/gmail-fetch-messages-from-cache.cron.job.ts b/packages/twenty-server/src/modules/messaging/crons/jobs/gmail-fetch-messages-from-cache.cron.job.ts index b9fb6cf7d..549bbb263 100644 --- a/packages/twenty-server/src/modules/messaging/crons/jobs/gmail-fetch-messages-from-cache.cron.job.ts +++ b/packages/twenty-server/src/modules/messaging/crons/jobs/gmail-fetch-messages-from-cache.cron.job.ts @@ -11,6 +11,7 @@ import { InjectObjectMetadataRepository } from 'src/engine/object-metadata-repos import { MessageChannelRepository } from 'src/modules/messaging/repositories/message-channel.repository'; import { MessageChannelObjectMetadata } from 'src/modules/messaging/standard-objects/message-channel.object-metadata'; import { GmailFetchMessageContentFromCacheService } from 'src/modules/messaging/services/gmail-fetch-message-content-from-cache/gmail-fetch-message-content-from-cache.service'; +import { EnvironmentService } from 'src/engine/integrations/environment/environment.service'; @Injectable() export class GmailFetchMessagesFromCacheCronJob @@ -24,14 +25,17 @@ export class GmailFetchMessagesFromCacheCronJob @InjectObjectMetadataRepository(MessageChannelObjectMetadata) private readonly messageChannelRepository: MessageChannelRepository, private readonly gmailFetchMessageContentFromCacheService: GmailFetchMessageContentFromCacheService, + private readonly environmentService: EnvironmentService, ) {} async handle(): Promise { const workspaceIds = ( await this.workspaceRepository.find({ - where: { - subscriptionStatus: In(['active', 'trialing', 'past_due']), - }, + where: this.environmentService.get('IS_BILLING_ENABLED') + ? { + subscriptionStatus: In(['active', 'trialing', 'past_due']), + } + : {}, select: ['id'], }) ).map((workspace) => workspace.id); diff --git a/packages/twenty-server/src/modules/messaging/crons/jobs/gmail-partial-sync.cron.job.ts b/packages/twenty-server/src/modules/messaging/crons/jobs/gmail-partial-sync.cron.job.ts index 54cde83f7..d6fe90dc1 100644 --- a/packages/twenty-server/src/modules/messaging/crons/jobs/gmail-partial-sync.cron.job.ts +++ b/packages/twenty-server/src/modules/messaging/crons/jobs/gmail-partial-sync.cron.job.ts @@ -16,6 +16,7 @@ import { MessageQueueService } from 'src/engine/integrations/message-queue/servi import { InjectObjectMetadataRepository } from 'src/engine/object-metadata-repository/object-metadata-repository.decorator'; import { MessageChannelRepository } from 'src/modules/messaging/repositories/message-channel.repository'; import { MessageChannelObjectMetadata } from 'src/modules/messaging/standard-objects/message-channel.object-metadata'; +import { EnvironmentService } from 'src/engine/integrations/environment/environment.service'; @Injectable() export class GmailPartialSyncCronJob implements MessageQueueJob { @@ -30,14 +31,17 @@ export class GmailPartialSyncCronJob implements MessageQueueJob { private readonly messageQueueService: MessageQueueService, @InjectObjectMetadataRepository(MessageChannelObjectMetadata) private readonly messageChannelRepository: MessageChannelRepository, + private readonly environmentService: EnvironmentService, ) {} async handle(): Promise { const workspaceIds = ( await this.workspaceRepository.find({ - where: { - subscriptionStatus: In(['active', 'trialing', 'past_due']), - }, + where: this.environmentService.get('IS_BILLING_ENABLED') + ? { + subscriptionStatus: In(['active', 'trialing', 'past_due']), + } + : {}, select: ['id'], }) ).map((workspace) => workspace.id);