This PR is replacing and removing all the raw queries and repositories with the new `TwentyORM` and injection system using `@InjectWorkspaceRepository`. Some logic that was contained inside repositories has been moved to the services. In this PR we're only replacing repositories for calendar feature. --------- Co-authored-by: Weiko <corentin@twenty.com> Co-authored-by: bosiraphael <raphael.bosi@gmail.com> Co-authored-by: Charles Bochet <charles@twenty.com>
58 lines
2.2 KiB
TypeScript
58 lines
2.2 KiB
TypeScript
import { InjectRepository } from '@nestjs/typeorm';
|
|
import { Scope } from '@nestjs/common';
|
|
|
|
import { Repository, In } from 'typeorm';
|
|
|
|
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';
|
|
import { MessageQueue } from 'src/engine/integrations/message-queue/message-queue.constants';
|
|
import { Processor } from 'src/engine/integrations/message-queue/decorators/processor.decorator';
|
|
import { Process } from 'src/engine/integrations/message-queue/decorators/process.decorator';
|
|
|
|
@Processor({
|
|
queueName: MessageQueue.cronQueue,
|
|
scope: Scope.REQUEST,
|
|
})
|
|
export class GoogleCalendarSyncCronJob {
|
|
constructor(
|
|
@InjectRepository(Workspace, 'core')
|
|
private readonly workspaceRepository: Repository<Workspace>,
|
|
@InjectRepository(DataSourceEntity, 'metadata')
|
|
private readonly dataSourceRepository: Repository<DataSourceEntity>,
|
|
private readonly workspaceGoogleCalendarSyncService: WorkspaceGoogleCalendarSyncService,
|
|
private readonly environmentService: EnvironmentService,
|
|
) {}
|
|
|
|
@Process(GoogleCalendarSyncCronJob.name)
|
|
async handle(): Promise<void> {
|
|
const workspaceIds = (
|
|
await this.workspaceRepository.find({
|
|
where: this.environmentService.get('IS_BILLING_ENABLED')
|
|
? {
|
|
subscriptionStatus: In(['active', 'trialing', 'past_due']),
|
|
}
|
|
: {},
|
|
select: ['id'],
|
|
})
|
|
).map((workspace) => workspace.id);
|
|
|
|
const dataSources = await this.dataSourceRepository.find({
|
|
where: {
|
|
workspaceId: In(workspaceIds),
|
|
},
|
|
});
|
|
|
|
const workspaceIdsWithDataSources = new Set(
|
|
dataSources.map((dataSource) => dataSource.workspaceId),
|
|
);
|
|
|
|
for (const workspaceId of workspaceIdsWithDataSources) {
|
|
await this.workspaceGoogleCalendarSyncService.startWorkspaceGoogleCalendarSync(
|
|
workspaceId,
|
|
);
|
|
}
|
|
}
|
|
}
|