From b6b888138efd293cd2ed959c23eae4393e36a606 Mon Sep 17 00:00:00 2001 From: Thomas Trompette Date: Tue, 4 Jun 2024 12:11:46 +0200 Subject: [PATCH] Add logs --- .../record-position-query.factory.spec.ts | 8 ++-- .../record-position-backfill-service.spec.ts | 2 +- .../record-position-backfill-service.ts | 37 +++++++++++++------ 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-query-builder/factories/__tests__/record-position-query.factory.spec.ts b/packages/twenty-server/src/engine/api/graphql/workspace-query-builder/factories/__tests__/record-position-query.factory.spec.ts index 843789ff25d8..106447ccfd05 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-query-builder/factories/__tests__/record-position-query.factory.spec.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-query-builder/factories/__tests__/record-position-query.factory.spec.ts @@ -19,7 +19,7 @@ describe('RecordPositionQueryFactory', () => { it('should return query and params for FIND_BY_POSITION', async () => { const positionValue = 1; const queryType = RecordPositionQueryType.FIND_BY_POSITION; - const [query, params] = await factory.create( + const [query, params] = factory.create( { positionValue, recordPositionQueryType: queryType }, objectMetadataItem, dataSourceSchema, @@ -34,7 +34,7 @@ describe('RecordPositionQueryFactory', () => { it('should return query and params for FIND_MIN_POSITION', async () => { const queryType = RecordPositionQueryType.FIND_MIN_POSITION; - const [query, params] = await factory.create( + const [query, params] = factory.create( { recordPositionQueryType: queryType }, objectMetadataItem, dataSourceSchema, @@ -48,7 +48,7 @@ describe('RecordPositionQueryFactory', () => { it('should return query and params for FIND_MAX_POSITION', async () => { const queryType = RecordPositionQueryType.FIND_MAX_POSITION; - const [query, params] = await factory.create( + const [query, params] = factory.create( { recordPositionQueryType: queryType }, objectMetadataItem, dataSourceSchema, @@ -64,7 +64,7 @@ describe('RecordPositionQueryFactory', () => { const positionValue = 1; const recordId = '1'; const queryType = RecordPositionQueryType.UPDATE_POSITION; - const [query, params] = await factory.create( + const [query, params] = factory.create( { positionValue, recordId, recordPositionQueryType: queryType }, objectMetadataItem, dataSourceSchema, diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/services/__tests__/record-position-backfill-service.spec.ts b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/services/__tests__/record-position-backfill-service.spec.ts index 5373d60479d9..2f4305dabee7 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/services/__tests__/record-position-backfill-service.spec.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/services/__tests__/record-position-backfill-service.spec.ts @@ -16,7 +16,7 @@ describe('RecordPositionBackfillService', () => { beforeEach(async () => { recordPositionQueryFactory = { - create: jest.fn().mockResolvedValue(['query', []]), + create: jest.fn().mockReturnValue(['query', []]), }; recordPositionFactory = { diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/services/record-position-backfill-service.ts b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/services/record-position-backfill-service.ts index d6483f4f2e10..ef0fbc1cf21f 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/services/record-position-backfill-service.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/services/record-position-backfill-service.ts @@ -1,7 +1,5 @@ import { Injectable, Logger } from '@nestjs/common'; -import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface'; - import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service'; import { RecordPositionQueryFactory, @@ -9,6 +7,7 @@ import { } from 'src/engine/api/graphql/workspace-query-builder/factories/record-position-query.factory'; import { RecordPositionFactory } from 'src/engine/api/graphql/workspace-query-runner/factories/record-position.factory'; import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service'; +import { hasPositionField } from 'src/engine/metadata-modules/object-metadata/utils/has-position-field.util'; @Injectable() export class RecordPositionBackfillService { @@ -21,6 +20,10 @@ export class RecordPositionBackfillService { ) {} async backfill(workspaceId: string, dryRun: boolean) { + this.logger.log( + `Starting backfilling record positions for workspace ${workspaceId}`, + ); + const dataSourceSchema = this.workspaceDataSourceService.getSchemaName(workspaceId); @@ -34,7 +37,7 @@ export class RecordPositionBackfillService { for (const objectMetadata of objectMetadataWithPosition) { const [recordsWithoutPositionQuery, recordsWithoutPositionQueryParams] = - await this.recordPositionQueryFactory.create( + this.recordPositionQueryFactory.create( { recordPositionQueryType: RecordPositionQueryType.FIND_BY_POSITION, positionValue: null, @@ -48,12 +51,21 @@ export class RecordPositionBackfillService { recordsWithoutPositionQuery, recordsWithoutPositionQueryParams, workspaceId, - undefined, ); + if (recordsWithoutPosition.length === 0) { + this.logger.log( + `No records without position for ${objectMetadata.nameSingular}`, + ); + continue; + } + const position = await this.recordPositionFactory.create( 'last', - objectMetadata as ObjectMetadataInterface, + { + isCustom: objectMetadata.isCustom, + nameSingular: objectMetadata.nameSingular, + }, workspaceId, ); @@ -63,6 +75,14 @@ export class RecordPositionBackfillService { recordIndex++ ) { const recordId = recordsWithoutPosition[recordIndex].id; + + if (!recordId) { + this.logger.log( + `Fetched record without id for ${objectMetadata.nameSingular}`, + ); + continue; + } + const backfilledPosition = position + recordIndex; this.logger.log( @@ -73,7 +93,7 @@ export class RecordPositionBackfillService { continue; } - const [query, params] = await this.recordPositionQueryFactory.create( + const [query, params] = this.recordPositionQueryFactory.create( { recordPositionQueryType: RecordPositionQueryType.UPDATE_POSITION, recordId: recordsWithoutPosition[recordIndex].id, @@ -87,13 +107,8 @@ export class RecordPositionBackfillService { query, params, workspaceId, - undefined, ); } } } } - -const hasPositionField = (objectMetadata: ObjectMetadataInterface) => - ['company', 'opportunity', 'person'].includes(objectMetadata.nameSingular) || - objectMetadata.isCustom;