From f2ee990a573dc70ef48f0746a504b09247c33474 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Fri, 9 May 2025 09:57:54 +0200 Subject: [PATCH] refactor(core): Move third batch of repositories to `@n8n/db` (#15166) --- packages/@n8n/db/src/repositories/index.ts | 9 ++++++ .../db/src}/repositories/tag.repository.ts | 5 ++-- .../test-case-execution.repository.ee.ts | 5 ++-- .../test-definition.repository.ee.ts | 8 ++--- .../repositories/test-metric.repository.ee.ts | 3 +- .../repositories/test-run.repository.ee.ts | 17 ++++++----- .../src}/repositories/variables.repository.ts | 3 +- .../workflow-history.repository.ts | 3 +- .../workflow-statistics.repository.ts | 6 ++-- .../workflow-tag-mapping.repository.ts | 3 +- .../get-test-run-final-result.ee.test.ts | 4 +-- .../db/src/utils/get-final-test-result.ts | 30 +++++++++++++++++++ .../workflow-statistics.controller.ts | 3 +- .../__tests__/workflow-statistics.test.ts | 2 +- .../source-control-export.service.test.ts | 4 +-- .../__tests__/source-control.service.test.ts | 2 +- .../source-control-export.service.ee.ts | 4 +-- .../source-control-import.service.ee.ts | 6 ++-- .../source-control.service.ee.ts | 3 +- .../variables/variables.service.ee.ts | 3 +- .../test-definition.service.ee.ts | 3 +- .../test-definitions.controller.ee.ts | 14 ++++++--- .../__tests__/test-runner.service.ee.test.ts | 6 ++-- .../test-runner/test-runner.service.ee.ts | 10 ++++--- .../src/evaluation.ee/test-runner/utils.ee.ts | 30 +------------------ .../evaluation.ee/test-runs.controller.ee.ts | 11 +++++-- .../v1/handlers/tags/tags.handler.ts | 2 +- .../handlers/variables/variables.handler.ts | 2 +- .../handlers/workflows/workflows.handler.ts | 3 +- .../handlers/workflows/workflows.service.ts | 3 +- .../workflow-statistics.service.test.ts | 2 +- packages/cli/src/services/cta.service.ts | 3 +- packages/cli/src/services/import.service.ts | 2 +- packages/cli/src/services/tag.service.ts | 2 +- .../services/workflow-statistics.service.ts | 3 +- .../workflow-history.service.ee.test.ts | 2 +- .../workflow-history-manager.ee.ts | 2 +- .../workflow-history.service.ee.ts | 2 +- .../cli/src/workflows/workflow.service.ts | 3 +- .../cli/src/workflows/workflows.controller.ts | 2 +- .../evaluation/test-definitions.api.test.ts | 2 +- .../evaluation/test-runs.api.test.ts | 4 +-- .../test/integration/import.service.test.ts | 2 +- .../license-metrics.repository.test.ts | 3 +- .../endpoints-with-scopes-enabled.test.ts | 2 +- .../test/integration/public-api/tags.test.ts | 3 +- .../integration/public-api/workflows.test.ts | 2 +- .../cli/test/integration/shared/db/tags.ts | 7 ++--- .../test/integration/shared/db/variables.ts | 3 +- .../integration/shared/db/workflow-history.ts | 3 +- .../shared/db/workflow-statistics.ts | 3 +- .../cli/test/integration/tags.api.test.ts | 3 +- .../cli/test/integration/variables.test.ts | 4 +-- .../workflow-history-manager.test.ts | 2 +- ...tag-mapping.repository.integration.test.ts | 5 ++-- .../workflows/workflows.controller.ee.test.ts | 2 +- .../workflows/workflows.controller.test.ts | 2 +- pnpm-lock.yaml | 12 ++++---- 58 files changed, 155 insertions(+), 139 deletions(-) rename packages/{cli/src/databases => @n8n/db/src}/repositories/tag.repository.ts (95%) rename packages/{cli/src/databases => @n8n/db/src}/repositories/test-case-execution.repository.ee.ts (96%) rename packages/{cli/src/databases => @n8n/db/src}/repositories/test-definition.repository.ee.ts (87%) rename packages/{cli/src/databases => @n8n/db/src}/repositories/test-metric.repository.ee.ts (85%) rename packages/{cli/src/databases => @n8n/db/src}/repositories/test-run.repository.ee.ts (88%) rename packages/{cli/src/databases => @n8n/db/src}/repositories/variables.repository.ts (85%) rename packages/{cli/src/databases => @n8n/db/src}/repositories/workflow-history.repository.ts (88%) rename packages/{cli/src/databases => @n8n/db/src}/repositories/workflow-statistics.repository.ts (96%) rename packages/{cli/src/databases => @n8n/db/src}/repositories/workflow-tag-mapping.repository.ts (92%) rename packages/{cli/src/evaluation.ee/test-runner => @n8n/db/src/utils}/__tests__/get-test-run-final-result.ee.test.ts (90%) create mode 100644 packages/@n8n/db/src/utils/get-final-test-result.ts diff --git a/packages/@n8n/db/src/repositories/index.ts b/packages/@n8n/db/src/repositories/index.ts index fdfc3da661..7ad07d5bc5 100644 --- a/packages/@n8n/db/src/repositories/index.ts +++ b/packages/@n8n/db/src/repositories/index.ts @@ -19,3 +19,12 @@ export { LicenseMetricsRepository } from './license-metrics.repository'; export { ProjectRelationRepository } from './project-relation.repository'; export { ProjectRepository } from './project.repository'; export { ProcessedDataRepository } from './processed-data.repository'; +export { TagRepository } from './tag.repository'; +export { TestCaseExecutionRepository } from './test-case-execution.repository.ee'; +export { TestDefinitionRepository } from './test-definition.repository.ee'; +export { TestMetricRepository } from './test-metric.repository.ee'; +export { TestRunRepository } from './test-run.repository.ee'; +export { VariablesRepository } from './variables.repository'; +export { WorkflowHistoryRepository } from './workflow-history.repository'; +export { WorkflowStatisticsRepository } from './workflow-statistics.repository'; +export { WorkflowTagMappingRepository } from './workflow-tag-mapping.repository'; diff --git a/packages/cli/src/databases/repositories/tag.repository.ts b/packages/@n8n/db/src/repositories/tag.repository.ts similarity index 95% rename from packages/cli/src/databases/repositories/tag.repository.ts rename to packages/@n8n/db/src/repositories/tag.repository.ts index cca7bacb51..d27843690f 100644 --- a/packages/cli/src/databases/repositories/tag.repository.ts +++ b/packages/@n8n/db/src/repositories/tag.repository.ts @@ -1,10 +1,11 @@ -import type { IWorkflowDb } from '@n8n/db'; -import { TagEntity } from '@n8n/db'; import { Service } from '@n8n/di'; import type { EntityManager } from '@n8n/typeorm'; import { DataSource, In, Repository } from '@n8n/typeorm'; import intersection from 'lodash/intersection'; +import { TagEntity } from '../entities'; +import type { IWorkflowDb } from '../entities/types-db'; + @Service() export class TagRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/test-case-execution.repository.ee.ts b/packages/@n8n/db/src/repositories/test-case-execution.repository.ee.ts similarity index 96% rename from packages/cli/src/databases/repositories/test-case-execution.repository.ee.ts rename to packages/@n8n/db/src/repositories/test-case-execution.repository.ee.ts index 202ff116ff..d34d2c7cf7 100644 --- a/packages/cli/src/databases/repositories/test-case-execution.repository.ee.ts +++ b/packages/@n8n/db/src/repositories/test-case-execution.repository.ee.ts @@ -1,11 +1,12 @@ -import { TestCaseExecution } from '@n8n/db'; -import type { TestCaseExecutionErrorCode } from '@n8n/db'; import { Service } from '@n8n/di'; import type { EntityManager } from '@n8n/typeorm'; import { DataSource, In, Not, Repository } from '@n8n/typeorm'; import type { DeepPartial } from '@n8n/typeorm/common/DeepPartial'; import type { IDataObject } from 'n8n-workflow'; +import { TestCaseExecution } from '../entities'; +import type { TestCaseExecutionErrorCode } from '../entities/types-db'; + type StatusUpdateOptions = { testRunId: string; pastExecutionId: string; diff --git a/packages/cli/src/databases/repositories/test-definition.repository.ee.ts b/packages/@n8n/db/src/repositories/test-definition.repository.ee.ts similarity index 87% rename from packages/cli/src/databases/repositories/test-definition.repository.ee.ts rename to packages/@n8n/db/src/repositories/test-definition.repository.ee.ts index 9a72c91505..e8fca3a868 100644 --- a/packages/cli/src/databases/repositories/test-definition.repository.ee.ts +++ b/packages/@n8n/db/src/repositories/test-definition.repository.ee.ts @@ -1,10 +1,10 @@ -import { TestDefinition } from '@n8n/db'; import { Service } from '@n8n/di'; import type { FindManyOptions, FindOptionsWhere } from '@n8n/typeorm'; import { DataSource, In, Repository } from '@n8n/typeorm'; +import { UserError } from 'n8n-workflow'; -import { ForbiddenError } from '@/errors/response-errors/forbidden.error'; -import type { ListQuery } from '@/requests'; +import { TestDefinition } from '../entities'; +import type { ListQuery } from '../entities/types-db'; @Service() export class TestDefinitionRepository extends Repository { @@ -19,7 +19,7 @@ export class TestDefinitionRepository extends Repository { if (options?.filter?.workflowId) { if (!accessibleWorkflowIds.includes(options.filter.workflowId as string)) { - throw new ForbiddenError('User does not have access to the workflow'); + throw new UserError('User does not have access to the workflow'); } where.workflow = { diff --git a/packages/cli/src/databases/repositories/test-metric.repository.ee.ts b/packages/@n8n/db/src/repositories/test-metric.repository.ee.ts similarity index 85% rename from packages/cli/src/databases/repositories/test-metric.repository.ee.ts rename to packages/@n8n/db/src/repositories/test-metric.repository.ee.ts index 1fcadafae9..d8528fc104 100644 --- a/packages/cli/src/databases/repositories/test-metric.repository.ee.ts +++ b/packages/@n8n/db/src/repositories/test-metric.repository.ee.ts @@ -1,7 +1,8 @@ -import { TestMetric } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, Repository } from '@n8n/typeorm'; +import { TestMetric } from '../entities'; + @Service() export class TestMetricRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/test-run.repository.ee.ts b/packages/@n8n/db/src/repositories/test-run.repository.ee.ts similarity index 88% rename from packages/cli/src/databases/repositories/test-run.repository.ee.ts rename to packages/@n8n/db/src/repositories/test-run.repository.ee.ts index 5478ca0bf6..90684dccd6 100644 --- a/packages/cli/src/databases/repositories/test-run.repository.ee.ts +++ b/packages/@n8n/db/src/repositories/test-run.repository.ee.ts @@ -1,13 +1,16 @@ -import type { AggregatedTestRunMetrics, TestRunErrorCode, TestRunFinalResult } from '@n8n/db'; -import { TestRun } from '@n8n/db'; import { Service } from '@n8n/di'; import type { EntityManager, FindManyOptions } from '@n8n/typeorm'; import { DataSource, In, Repository } from '@n8n/typeorm'; -import type { IDataObject } from 'n8n-workflow'; +import { UnexpectedError, type IDataObject } from 'n8n-workflow'; -import { NotFoundError } from '@/errors/response-errors/not-found.error'; -import { getTestRunFinalResult } from '@/evaluation.ee/test-runner/utils.ee'; -import type { ListQuery } from '@/requests'; +import { TestRun } from '../entities'; +import type { + AggregatedTestRunMetrics, + TestRunErrorCode, + TestRunFinalResult, + ListQuery, +} from '../entities/types-db'; +import { getTestRunFinalResult } from '../utils/get-final-test-result'; export type TestRunSummary = TestRun & { finalResult: TestRunFinalResult | null; @@ -110,7 +113,7 @@ export class TestRunRepository extends Repository { }); if (!testRun) { - throw new NotFoundError('Test run not found'); + throw new UnexpectedError('Test run not found'); } testRun.finalResult = diff --git a/packages/cli/src/databases/repositories/variables.repository.ts b/packages/@n8n/db/src/repositories/variables.repository.ts similarity index 85% rename from packages/cli/src/databases/repositories/variables.repository.ts rename to packages/@n8n/db/src/repositories/variables.repository.ts index 608a218545..4145d5887c 100644 --- a/packages/cli/src/databases/repositories/variables.repository.ts +++ b/packages/@n8n/db/src/repositories/variables.repository.ts @@ -1,7 +1,8 @@ -import { Variables } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, Repository } from '@n8n/typeorm'; +import { Variables } from '../entities'; + @Service() export class VariablesRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/workflow-history.repository.ts b/packages/@n8n/db/src/repositories/workflow-history.repository.ts similarity index 88% rename from packages/cli/src/databases/repositories/workflow-history.repository.ts rename to packages/@n8n/db/src/repositories/workflow-history.repository.ts index 0993dedff6..06e69b2fed 100644 --- a/packages/cli/src/databases/repositories/workflow-history.repository.ts +++ b/packages/@n8n/db/src/repositories/workflow-history.repository.ts @@ -1,7 +1,8 @@ -import { WorkflowHistory } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, LessThan, Repository } from '@n8n/typeorm'; +import { WorkflowHistory } from '../entities'; + @Service() export class WorkflowHistoryRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/workflow-statistics.repository.ts b/packages/@n8n/db/src/repositories/workflow-statistics.repository.ts similarity index 96% rename from packages/cli/src/databases/repositories/workflow-statistics.repository.ts rename to packages/@n8n/db/src/repositories/workflow-statistics.repository.ts index 7cb68f20c3..96f68e2d0e 100644 --- a/packages/cli/src/databases/repositories/workflow-statistics.repository.ts +++ b/packages/@n8n/db/src/repositories/workflow-statistics.repository.ts @@ -1,9 +1,11 @@ import { GlobalConfig } from '@n8n/config'; -import type { User } from '@n8n/db'; -import { StatisticsNames, WorkflowStatistics } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, MoreThanOrEqual, QueryFailedError, Repository } from '@n8n/typeorm'; +import { WorkflowStatistics } from '../entities'; +import type { User } from '../entities'; +import { StatisticsNames } from '../entities/types-db'; + type StatisticsInsertResult = 'insert' | 'failed' | 'alreadyExists'; type StatisticsUpsertResult = StatisticsInsertResult | 'update'; diff --git a/packages/cli/src/databases/repositories/workflow-tag-mapping.repository.ts b/packages/@n8n/db/src/repositories/workflow-tag-mapping.repository.ts similarity index 92% rename from packages/cli/src/databases/repositories/workflow-tag-mapping.repository.ts rename to packages/@n8n/db/src/repositories/workflow-tag-mapping.repository.ts index a23db6aa9c..21ec124206 100644 --- a/packages/cli/src/databases/repositories/workflow-tag-mapping.repository.ts +++ b/packages/@n8n/db/src/repositories/workflow-tag-mapping.repository.ts @@ -1,7 +1,8 @@ -import { WorkflowTagMapping } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, Repository } from '@n8n/typeorm'; +import { WorkflowTagMapping } from '../entities'; + @Service() export class WorkflowTagMappingRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/evaluation.ee/test-runner/__tests__/get-test-run-final-result.ee.test.ts b/packages/@n8n/db/src/utils/__tests__/get-test-run-final-result.ee.test.ts similarity index 90% rename from packages/cli/src/evaluation.ee/test-runner/__tests__/get-test-run-final-result.ee.test.ts rename to packages/@n8n/db/src/utils/__tests__/get-test-run-final-result.ee.test.ts index 8e70e985ee..f16ef9cceb 100644 --- a/packages/cli/src/evaluation.ee/test-runner/__tests__/get-test-run-final-result.ee.test.ts +++ b/packages/@n8n/db/src/utils/__tests__/get-test-run-final-result.ee.test.ts @@ -1,7 +1,7 @@ -import type { TestCaseExecution } from '@n8n/db'; import { mock } from 'jest-mock-extended'; -import { getTestRunFinalResult } from '@/evaluation.ee/test-runner/utils.ee'; +import type { TestCaseExecution } from '../../entities'; +import { getTestRunFinalResult } from '../get-final-test-result'; function mockTestCaseExecutions(statuses: Array) { return statuses.map((status) => mock({ status })); diff --git a/packages/@n8n/db/src/utils/get-final-test-result.ts b/packages/@n8n/db/src/utils/get-final-test-result.ts new file mode 100644 index 0000000000..9c7eed5a02 --- /dev/null +++ b/packages/@n8n/db/src/utils/get-final-test-result.ts @@ -0,0 +1,30 @@ +import type { TestCaseExecution } from '../entities'; +import type { TestRunFinalResult } from '../entities/types-db'; + +/** + * Returns the final result of the test run based on the test case executions. + * The final result is the most severe status among all test case executions' statuses. + */ +export function getTestRunFinalResult(testCaseExecutions: TestCaseExecution[]): TestRunFinalResult { + // Priority of statuses: error > warning > success + const severityMap: Record = { + error: 3, + warning: 2, + success: 1, + }; + + let finalResult: TestRunFinalResult = 'success'; + + for (const testCaseExecution of testCaseExecutions) { + if (['error', 'warning'].includes(testCaseExecution.status)) { + if ( + testCaseExecution.status in severityMap && + severityMap[testCaseExecution.status as TestRunFinalResult] > severityMap[finalResult] + ) { + finalResult = testCaseExecution.status as TestRunFinalResult; + } + } + } + + return finalResult; +} diff --git a/packages/cli/src/controllers/workflow-statistics.controller.ts b/packages/cli/src/controllers/workflow-statistics.controller.ts index 8e8c82dd55..174c0a70cc 100644 --- a/packages/cli/src/controllers/workflow-statistics.controller.ts +++ b/packages/cli/src/controllers/workflow-statistics.controller.ts @@ -1,10 +1,9 @@ import type { WorkflowStatistics } from '@n8n/db'; -import { StatisticsNames } from '@n8n/db'; +import { StatisticsNames, WorkflowStatisticsRepository } from '@n8n/db'; import { Get, Middleware, RestController } from '@n8n/decorators'; import { Response, NextFunction } from 'express'; import { Logger } from 'n8n-core'; -import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository'; import { NotFoundError } from '@/errors/response-errors/not-found.error'; import type { IWorkflowStatisticsDataLoaded } from '@/interfaces'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; diff --git a/packages/cli/src/databases/repositories/__tests__/workflow-statistics.test.ts b/packages/cli/src/databases/repositories/__tests__/workflow-statistics.test.ts index 2d7404ca0f..c788ac4e68 100644 --- a/packages/cli/src/databases/repositories/__tests__/workflow-statistics.test.ts +++ b/packages/cli/src/databases/repositories/__tests__/workflow-statistics.test.ts @@ -1,9 +1,9 @@ import { StatisticsNames, WorkflowStatistics } from '@n8n/db'; +import { WorkflowStatisticsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { type InsertResult, QueryFailedError } from '@n8n/typeorm'; import { mock, mockClear } from 'jest-mock-extended'; -import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository'; import { mockEntityManager } from '@test/mocking'; import { createWorkflow } from '@test-integration/db/workflows'; import * as testDb from '@test-integration/test-db'; diff --git a/packages/cli/src/environments.ee/source-control/__tests__/source-control-export.service.test.ts b/packages/cli/src/environments.ee/source-control/__tests__/source-control-export.service.test.ts index b127451ebb..59dceafaf8 100644 --- a/packages/cli/src/environments.ee/source-control/__tests__/source-control-export.service.test.ts +++ b/packages/cli/src/environments.ee/source-control/__tests__/source-control-export.service.test.ts @@ -2,6 +2,8 @@ import type { SourceControlledFile } from '@n8n/api-types'; import type { SharedCredentials } from '@n8n/db'; import type { SharedWorkflow } from '@n8n/db'; import type { FolderRepository } from '@n8n/db'; +import type { TagRepository } from '@n8n/db'; +import type { WorkflowTagMappingRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { mock, captor } from 'jest-mock-extended'; import { Cipher, type InstanceSettings } from 'n8n-core'; @@ -9,8 +11,6 @@ import fsp from 'node:fs/promises'; import type { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import type { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; -import type { TagRepository } from '@/databases/repositories/tag.repository'; -import type { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository'; import type { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import type { VariablesService } from '../../variables/variables.service.ee'; diff --git a/packages/cli/src/environments.ee/source-control/__tests__/source-control.service.test.ts b/packages/cli/src/environments.ee/source-control/__tests__/source-control.service.test.ts index e10173532b..62346d6db1 100644 --- a/packages/cli/src/environments.ee/source-control/__tests__/source-control.service.test.ts +++ b/packages/cli/src/environments.ee/source-control/__tests__/source-control.service.test.ts @@ -4,11 +4,11 @@ import type { FolderWithWorkflowAndSubFolderCount } from '@n8n/db'; import type { TagEntity } from '@n8n/db'; import type { User } from '@n8n/db'; import type { FolderRepository } from '@n8n/db'; +import type { TagRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { mock } from 'jest-mock-extended'; import { InstanceSettings } from 'n8n-core'; -import type { TagRepository } from '@/databases/repositories/tag.repository'; import { SourceControlPreferencesService } from '@/environments.ee/source-control/source-control-preferences.service.ee'; import { SourceControlService } from '@/environments.ee/source-control/source-control.service.ee'; diff --git a/packages/cli/src/environments.ee/source-control/source-control-export.service.ee.ts b/packages/cli/src/environments.ee/source-control/source-control-export.service.ee.ts index 9426a166f3..693d09ed6c 100644 --- a/packages/cli/src/environments.ee/source-control/source-control-export.service.ee.ts +++ b/packages/cli/src/environments.ee/source-control/source-control-export.service.ee.ts @@ -1,6 +1,6 @@ import type { SourceControlledFile } from '@n8n/api-types'; import type { IWorkflowDb } from '@n8n/db'; -import { FolderRepository } from '@n8n/db'; +import { FolderRepository, TagRepository, WorkflowTagMappingRepository } from '@n8n/db'; import { Service } from '@n8n/di'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import import { In } from '@n8n/typeorm'; @@ -12,8 +12,6 @@ import path from 'path'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; -import { TagRepository } from '@/databases/repositories/tag.repository'; -import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { formatWorkflow } from '@/workflows/workflow.formatter'; diff --git a/packages/cli/src/environments.ee/source-control/source-control-import.service.ee.ts b/packages/cli/src/environments.ee/source-control/source-control-import.service.ee.ts index 9c0df9b450..8005dfbe61 100644 --- a/packages/cli/src/environments.ee/source-control/source-control-import.service.ee.ts +++ b/packages/cli/src/environments.ee/source-control/source-control-import.service.ee.ts @@ -5,6 +5,9 @@ import { CredentialsRepository, FolderRepository, ProjectRepository, + TagRepository, + VariablesRepository, + WorkflowTagMappingRepository, } from '@n8n/db'; import { Service } from '@n8n/di'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import @@ -19,10 +22,7 @@ import { ActiveWorkflowManager } from '@/active-workflow-manager'; import { CredentialsService } from '@/credentials/credentials.service'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; -import { TagRepository } from '@/databases/repositories/tag.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; -import { VariablesRepository } from '@/databases/repositories/variables.repository'; -import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import type { IWorkflowToImport } from '@/interfaces'; import { isUniqueConstraintError } from '@/response-helper'; diff --git a/packages/cli/src/environments.ee/source-control/source-control.service.ee.ts b/packages/cli/src/environments.ee/source-control/source-control.service.ee.ts index d05e1fdff1..de4ecbe5b6 100644 --- a/packages/cli/src/environments.ee/source-control/source-control.service.ee.ts +++ b/packages/cli/src/environments.ee/source-control/source-control.service.ee.ts @@ -4,7 +4,7 @@ import type { SourceControlledFile, } from '@n8n/api-types'; import type { Variables, TagEntity, User } from '@n8n/db'; -import { FolderRepository } from '@n8n/db'; +import { FolderRepository, TagRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { writeFileSync } from 'fs'; import { Logger } from 'n8n-core'; @@ -12,7 +12,6 @@ import { UnexpectedError, UserError } from 'n8n-workflow'; import path from 'path'; import type { PushResult } from 'simple-git'; -import { TagRepository } from '@/databases/repositories/tag.repository'; import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { EventService } from '@/events/event.service'; diff --git a/packages/cli/src/environments.ee/variables/variables.service.ee.ts b/packages/cli/src/environments.ee/variables/variables.service.ee.ts index dbd5b97493..15c739c7f5 100644 --- a/packages/cli/src/environments.ee/variables/variables.service.ee.ts +++ b/packages/cli/src/environments.ee/variables/variables.service.ee.ts @@ -1,8 +1,7 @@ -import { generateNanoId } from '@n8n/db'; import type { Variables } from '@n8n/db'; +import { generateNanoId, VariablesRepository } from '@n8n/db'; import { Service } from '@n8n/di'; -import { VariablesRepository } from '@/databases/repositories/variables.repository'; import { VariableCountLimitReachedError } from '@/errors/variable-count-limit-reached.error'; import { VariableValidationError } from '@/errors/variable-validation.error'; import { EventService } from '@/events/event.service'; diff --git a/packages/cli/src/evaluation.ee/test-definition.service.ee.ts b/packages/cli/src/evaluation.ee/test-definition.service.ee.ts index 607009ea80..11f989eb08 100644 --- a/packages/cli/src/evaluation.ee/test-definition.service.ee.ts +++ b/packages/cli/src/evaluation.ee/test-definition.service.ee.ts @@ -1,8 +1,7 @@ import type { MockedNodeItem, TestDefinition } from '@n8n/db'; -import { AnnotationTagRepository } from '@n8n/db'; +import { AnnotationTagRepository, TestDefinitionRepository } from '@n8n/db'; import { Service } from '@n8n/di'; -import { TestDefinitionRepository } from '@/databases/repositories/test-definition.repository.ee'; import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { NotFoundError } from '@/errors/response-errors/not-found.error'; import { validateEntity } from '@/generic-helpers'; diff --git a/packages/cli/src/evaluation.ee/test-definitions.controller.ee.ts b/packages/cli/src/evaluation.ee/test-definitions.controller.ee.ts index 50077b4d08..0c37c5feb4 100644 --- a/packages/cli/src/evaluation.ee/test-definitions.controller.ee.ts +++ b/packages/cli/src/evaluation.ee/test-definitions.controller.ee.ts @@ -1,5 +1,6 @@ import { Get, Post, Patch, RestController, Delete } from '@n8n/decorators'; import express from 'express'; +import { UserError } from 'n8n-workflow'; import assert from 'node:assert'; import { ForbiddenError } from '@/errors/response-errors/forbidden.error'; @@ -26,10 +27,15 @@ export class TestDefinitionsController { async getMany(req: TestDefinitionsRequest.GetMany) { const userAccessibleWorkflowIds = await getSharedWorkflowIds(req.user, ['workflow:read']); - return await this.testDefinitionService.getMany( - req.listQueryOptions, - userAccessibleWorkflowIds, - ); + try { + return await this.testDefinitionService.getMany( + req.listQueryOptions, + userAccessibleWorkflowIds, + ); + } catch (error) { + if (error instanceof UserError) throw new ForbiddenError(error.message); + throw error; + } } @Get('/:id') diff --git a/packages/cli/src/evaluation.ee/test-runner/__tests__/test-runner.service.ee.test.ts b/packages/cli/src/evaluation.ee/test-runner/__tests__/test-runner.service.ee.test.ts index 1c6f8c1bbc..36ae2f931d 100644 --- a/packages/cli/src/evaluation.ee/test-runner/__tests__/test-runner.service.ee.test.ts +++ b/packages/cli/src/evaluation.ee/test-runner/__tests__/test-runner.service.ee.test.ts @@ -4,6 +4,9 @@ import type { TestDefinition } from '@n8n/db'; import type { TestMetric } from '@n8n/db'; import type { TestRun } from '@n8n/db'; import type { ExecutionRepository } from '@n8n/db'; +import type { TestCaseExecutionRepository } from '@n8n/db'; +import type { TestMetricRepository } from '@n8n/db'; +import type { TestRunRepository } from '@n8n/db'; import type { SelectQueryBuilder } from '@n8n/typeorm'; import { stringify } from 'flatted'; import { readFileSync } from 'fs'; @@ -15,9 +18,6 @@ import path from 'path'; import type { ActiveExecutions } from '@/active-executions'; import config from '@/config'; -import type { TestCaseExecutionRepository } from '@/databases/repositories/test-case-execution.repository.ee'; -import type { TestMetricRepository } from '@/databases/repositories/test-metric.repository.ee'; -import type { TestRunRepository } from '@/databases/repositories/test-run.repository.ee'; import type { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials'; import { NodeTypes } from '@/node-types'; diff --git a/packages/cli/src/evaluation.ee/test-runner/test-runner.service.ee.ts b/packages/cli/src/evaluation.ee/test-runner/test-runner.service.ee.ts index c9ac32647e..f75efe6a63 100644 --- a/packages/cli/src/evaluation.ee/test-runner/test-runner.service.ee.ts +++ b/packages/cli/src/evaluation.ee/test-runner/test-runner.service.ee.ts @@ -1,5 +1,10 @@ import type { User, ExecutionEntity, MockedNodeItem, TestDefinition, TestRun } from '@n8n/db'; -import { ExecutionRepository } from '@n8n/db'; +import { + ExecutionRepository, + TestCaseExecutionRepository, + TestMetricRepository, + TestRunRepository, +} from '@n8n/db'; import { Service } from '@n8n/di'; import { parse } from 'flatted'; import difference from 'lodash/difference'; @@ -18,9 +23,6 @@ import assert from 'node:assert'; import { ActiveExecutions } from '@/active-executions'; import config from '@/config'; import { EVALUATION_METRICS_NODE } from '@/constants'; -import { TestCaseExecutionRepository } from '@/databases/repositories/test-case-execution.repository.ee'; -import { TestMetricRepository } from '@/databases/repositories/test-metric.repository.ee'; -import { TestRunRepository } from '@/databases/repositories/test-run.repository.ee'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import * as Db from '@/db'; import { TestCaseExecutionError, TestRunError } from '@/evaluation.ee/test-runner/errors.ee'; diff --git a/packages/cli/src/evaluation.ee/test-runner/utils.ee.ts b/packages/cli/src/evaluation.ee/test-runner/utils.ee.ts index 30962cb683..5331832a6c 100644 --- a/packages/cli/src/evaluation.ee/test-runner/utils.ee.ts +++ b/packages/cli/src/evaluation.ee/test-runner/utils.ee.ts @@ -1,4 +1,4 @@ -import type { TestCaseExecution, MockedNodeItem, TestRunFinalResult } from '@n8n/db'; +import type { MockedNodeItem } from '@n8n/db'; import assert from 'assert'; import { mapValues, pick } from 'lodash'; import type { @@ -70,34 +70,6 @@ export function getPastExecutionTriggerNode(executionData: IRunExecutionData) { }); } -/** - * Returns the final result of the test run based on the test case executions. - * The final result is the most severe status among all test case executions' statuses. - */ -export function getTestRunFinalResult(testCaseExecutions: TestCaseExecution[]): TestRunFinalResult { - // Priority of statuses: error > warning > success - const severityMap: Record = { - error: 3, - warning: 2, - success: 1, - }; - - let finalResult: TestRunFinalResult = 'success'; - - for (const testCaseExecution of testCaseExecutions) { - if (['error', 'warning'].includes(testCaseExecution.status)) { - if ( - testCaseExecution.status in severityMap && - severityMap[testCaseExecution.status as TestRunFinalResult] > severityMap[finalResult] - ) { - finalResult = testCaseExecution.status as TestRunFinalResult; - } - } - } - - return finalResult; -} - /** * Function to check if the node is root node or sub-node. * Sub-node is a node which does not have the main output (the only exception is Stop and Error node) diff --git a/packages/cli/src/evaluation.ee/test-runs.controller.ee.ts b/packages/cli/src/evaluation.ee/test-runs.controller.ee.ts index 5acc45c2bd..edf23084d2 100644 --- a/packages/cli/src/evaluation.ee/test-runs.controller.ee.ts +++ b/packages/cli/src/evaluation.ee/test-runs.controller.ee.ts @@ -1,9 +1,9 @@ +import { TestCaseExecutionRepository, TestRunRepository } from '@n8n/db'; import { Delete, Get, Post, RestController } from '@n8n/decorators'; import express from 'express'; import { InstanceSettings } from 'n8n-core'; +import { UnexpectedError } from 'n8n-workflow'; -import { TestCaseExecutionRepository } from '@/databases/repositories/test-case-execution.repository.ee'; -import { TestRunRepository } from '@/databases/repositories/test-run.repository.ee'; import { ConflictError } from '@/errors/response-errors/conflict.error'; import { NotFoundError } from '@/errors/response-errors/not-found.error'; import { NotImplementedError } from '@/errors/response-errors/not-implemented.error'; @@ -79,7 +79,12 @@ export class TestRunsController { await this.getTestDefinition(req); - return await this.testRunRepository.getTestRunSummaryById(testDefinitionId, id); + try { + return await this.testRunRepository.getTestRunSummaryById(testDefinitionId, id); + } catch (error) { + if (error instanceof UnexpectedError) throw new NotFoundError(error.message); + throw error; + } } @Get('/:testDefinitionId/runs/:id/cases') diff --git a/packages/cli/src/public-api/v1/handlers/tags/tags.handler.ts b/packages/cli/src/public-api/v1/handlers/tags/tags.handler.ts index 5199fc9550..32f3a1ff21 100644 --- a/packages/cli/src/public-api/v1/handlers/tags/tags.handler.ts +++ b/packages/cli/src/public-api/v1/handlers/tags/tags.handler.ts @@ -1,10 +1,10 @@ import type { TagEntity } from '@n8n/db'; +import { TagRepository } from '@n8n/db'; import { Container } from '@n8n/di'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import import type { FindManyOptions } from '@n8n/typeorm'; import type express from 'express'; -import { TagRepository } from '@/databases/repositories/tag.repository'; import { TagService } from '@/services/tag.service'; import type { TagRequest } from '../../../types'; diff --git a/packages/cli/src/public-api/v1/handlers/variables/variables.handler.ts b/packages/cli/src/public-api/v1/handlers/variables/variables.handler.ts index 5cbd8fdf30..3e08bc02ec 100644 --- a/packages/cli/src/public-api/v1/handlers/variables/variables.handler.ts +++ b/packages/cli/src/public-api/v1/handlers/variables/variables.handler.ts @@ -1,7 +1,7 @@ +import { VariablesRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { Response } from 'express'; -import { VariablesRepository } from '@/databases/repositories/variables.repository'; import { VariablesController } from '@/environments.ee/variables/variables.controller.ee'; import type { PaginatedRequest } from '@/public-api/types'; import type { VariablesRequest } from '@/requests'; diff --git a/packages/cli/src/public-api/v1/handlers/workflows/workflows.handler.ts b/packages/cli/src/public-api/v1/handlers/workflows/workflows.handler.ts index f3baccdaf8..389d82ea56 100644 --- a/packages/cli/src/public-api/v1/handlers/workflows/workflows.handler.ts +++ b/packages/cli/src/public-api/v1/handlers/workflows/workflows.handler.ts @@ -1,5 +1,5 @@ import { GlobalConfig } from '@n8n/config'; -import { WorkflowEntity, ProjectRepository } from '@n8n/db'; +import { WorkflowEntity, ProjectRepository, TagRepository } from '@n8n/db'; import { Container } from '@n8n/di'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import import { In, Like, QueryFailedError } from '@n8n/typeorm'; @@ -10,7 +10,6 @@ import { v4 as uuid } from 'uuid'; import { z } from 'zod'; import { ActiveWorkflowManager } from '@/active-workflow-manager'; -import { TagRepository } from '@/databases/repositories/tag.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { EventService } from '@/events/event.service'; import { ExternalHooks } from '@/external-hooks'; diff --git a/packages/cli/src/public-api/v1/handlers/workflows/workflows.service.ts b/packages/cli/src/public-api/v1/handlers/workflows/workflows.service.ts index b0cd2eccb8..18f876b32e 100644 --- a/packages/cli/src/public-api/v1/handlers/workflows/workflows.service.ts +++ b/packages/cli/src/public-api/v1/handlers/workflows/workflows.service.ts @@ -1,12 +1,11 @@ import { GlobalConfig } from '@n8n/config'; import type { Project, User } from '@n8n/db'; -import { WorkflowEntity, WorkflowTagMapping, SharedWorkflow } from '@n8n/db'; +import { WorkflowEntity, WorkflowTagMapping, SharedWorkflow, TagRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { Scope, WorkflowSharingRole } from '@n8n/permissions'; import type { WorkflowId } from 'n8n-workflow'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; -import { TagRepository } from '@/databases/repositories/tag.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import * as Db from '@/db'; import { License } from '@/license'; diff --git a/packages/cli/src/services/__tests__/workflow-statistics.service.test.ts b/packages/cli/src/services/__tests__/workflow-statistics.service.test.ts index cc4b12866d..601065c228 100644 --- a/packages/cli/src/services/__tests__/workflow-statistics.service.test.ts +++ b/packages/cli/src/services/__tests__/workflow-statistics.service.test.ts @@ -2,6 +2,7 @@ import { GlobalConfig } from '@n8n/config'; import type { Project } from '@n8n/db'; import type { User } from '@n8n/db'; import type { WorkflowStatistics } from '@n8n/db'; +import { WorkflowStatisticsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { QueryFailedError, @@ -20,7 +21,6 @@ import { } from 'n8n-workflow'; import config from '@/config'; -import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository'; import type { EventService } from '@/events/event.service'; import { OwnershipService } from '@/services/ownership.service'; import { UserService } from '@/services/user.service'; diff --git a/packages/cli/src/services/cta.service.ts b/packages/cli/src/services/cta.service.ts index 196886b563..8368710c6c 100644 --- a/packages/cli/src/services/cta.service.ts +++ b/packages/cli/src/services/cta.service.ts @@ -1,8 +1,7 @@ import type { User } from '@n8n/db'; +import { WorkflowStatisticsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; -import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository'; - @Service() export class CtaService { constructor(private readonly workflowStatisticsRepository: WorkflowStatisticsRepository) {} diff --git a/packages/cli/src/services/import.service.ts b/packages/cli/src/services/import.service.ts index df603c6fdc..fec04e8d15 100644 --- a/packages/cli/src/services/import.service.ts +++ b/packages/cli/src/services/import.service.ts @@ -5,13 +5,13 @@ import { SharedWorkflow, WorkflowTagMapping, CredentialsRepository, + TagRepository, } from '@n8n/db'; import { Service } from '@n8n/di'; import { Logger } from 'n8n-core'; import { type INode, type INodeCredentialsDetails, type IWorkflowBase } from 'n8n-workflow'; import { v4 as uuid } from 'uuid'; -import { TagRepository } from '@/databases/repositories/tag.repository'; import * as Db from '@/db'; import { replaceInvalidCredentials } from '@/workflow-helpers'; diff --git a/packages/cli/src/services/tag.service.ts b/packages/cli/src/services/tag.service.ts index 90f7559ea8..20d66cbf3a 100644 --- a/packages/cli/src/services/tag.service.ts +++ b/packages/cli/src/services/tag.service.ts @@ -1,7 +1,7 @@ import type { TagEntity, ITagWithCountDb } from '@n8n/db'; +import { TagRepository } from '@n8n/db'; import { Service } from '@n8n/di'; -import { TagRepository } from '@/databases/repositories/tag.repository'; import { ExternalHooks } from '@/external-hooks'; import { validateEntity } from '@/generic-helpers'; diff --git a/packages/cli/src/services/workflow-statistics.service.ts b/packages/cli/src/services/workflow-statistics.service.ts index 0993591a16..21e542ce18 100644 --- a/packages/cli/src/services/workflow-statistics.service.ts +++ b/packages/cli/src/services/workflow-statistics.service.ts @@ -1,4 +1,4 @@ -import { StatisticsNames } from '@n8n/db'; +import { StatisticsNames, WorkflowStatisticsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { Logger } from 'n8n-core'; import type { @@ -9,7 +9,6 @@ import type { WorkflowExecuteMode, } from 'n8n-workflow'; -import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository'; import { EventService } from '@/events/event.service'; import { UserService } from '@/services/user.service'; import { TypedEmitter } from '@/typed-emitter'; diff --git a/packages/cli/src/workflows/workflow-history.ee/__tests__/workflow-history.service.ee.test.ts b/packages/cli/src/workflows/workflow-history.ee/__tests__/workflow-history.service.ee.test.ts index f6de28c6ff..2f392d2112 100644 --- a/packages/cli/src/workflows/workflow-history.ee/__tests__/workflow-history.service.ee.test.ts +++ b/packages/cli/src/workflows/workflow-history.ee/__tests__/workflow-history.service.ee.test.ts @@ -1,7 +1,7 @@ import { User } from '@n8n/db'; +import { WorkflowHistoryRepository } from '@n8n/db'; import { mockClear } from 'jest-mock-extended'; -import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; import { WorkflowHistoryService } from '@/workflows/workflow-history.ee/workflow-history.service.ee'; import { mockInstance, mockLogger } from '@test/mocking'; diff --git a/packages/cli/src/workflows/workflow-history.ee/workflow-history-manager.ee.ts b/packages/cli/src/workflows/workflow-history.ee/workflow-history-manager.ee.ts index b320c144f6..1e9bce8f98 100644 --- a/packages/cli/src/workflows/workflow-history.ee/workflow-history-manager.ee.ts +++ b/packages/cli/src/workflows/workflow-history.ee/workflow-history-manager.ee.ts @@ -1,8 +1,8 @@ +import { WorkflowHistoryRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { DateTime } from 'luxon'; import { Time } from '@/constants'; -import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository'; import { getWorkflowHistoryPruneTime, diff --git a/packages/cli/src/workflows/workflow-history.ee/workflow-history.service.ee.ts b/packages/cli/src/workflows/workflow-history.ee/workflow-history.service.ee.ts index b3ef9013b3..e1b12b22ab 100644 --- a/packages/cli/src/workflows/workflow-history.ee/workflow-history.service.ee.ts +++ b/packages/cli/src/workflows/workflow-history.ee/workflow-history.service.ee.ts @@ -1,10 +1,10 @@ import type { User, WorkflowHistory } from '@n8n/db'; +import { WorkflowHistoryRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { Logger } from 'n8n-core'; import type { IWorkflowBase } from 'n8n-workflow'; import { ensureError } from 'n8n-workflow'; -import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository'; import { SharedWorkflowNotFoundError } from '@/errors/shared-workflow-not-found.error'; import { WorkflowHistoryVersionNotFoundError } from '@/errors/workflow-history-version-not-found.error'; diff --git a/packages/cli/src/workflows/workflow.service.ts b/packages/cli/src/workflows/workflow.service.ts index d81edab112..4ab1bf34e8 100644 --- a/packages/cli/src/workflows/workflow.service.ts +++ b/packages/cli/src/workflows/workflow.service.ts @@ -1,6 +1,6 @@ import { GlobalConfig } from '@n8n/config'; import type { User, WorkflowEntity, ListQueryDb } from '@n8n/db'; -import { SharedWorkflow, ExecutionRepository } from '@n8n/db'; +import { SharedWorkflow, ExecutionRepository, WorkflowTagMappingRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import type { Scope } from '@n8n/permissions'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import @@ -17,7 +17,6 @@ import { v4 as uuid } from 'uuid'; import { ActiveWorkflowManager } from '@/active-workflow-manager'; import config from '@/config'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; -import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository'; import type { WorkflowFolderUnionFull } from '@/databases/repositories/workflow.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { BadRequestError } from '@/errors/response-errors/bad-request.error'; diff --git a/packages/cli/src/workflows/workflows.controller.ts b/packages/cli/src/workflows/workflows.controller.ts index e26a98a535..882cef4c39 100644 --- a/packages/cli/src/workflows/workflows.controller.ts +++ b/packages/cli/src/workflows/workflows.controller.ts @@ -10,6 +10,7 @@ import { WorkflowEntity, ProjectRelationRepository, ProjectRepository, + TagRepository, } from '@n8n/db'; import { Body, @@ -33,7 +34,6 @@ import { UnexpectedError } from 'n8n-workflow'; import { v4 as uuid } from 'uuid'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; -import { TagRepository } from '@/databases/repositories/tag.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import * as Db from '@/db'; import { BadRequestError } from '@/errors/response-errors/bad-request.error'; diff --git a/packages/cli/test/integration/evaluation/test-definitions.api.test.ts b/packages/cli/test/integration/evaluation/test-definitions.api.test.ts index c0163bfa1d..8bdc08bca6 100644 --- a/packages/cli/test/integration/evaluation/test-definitions.api.test.ts +++ b/packages/cli/test/integration/evaluation/test-definitions.api.test.ts @@ -1,10 +1,10 @@ import type { User } from '@n8n/db'; import type { AnnotationTagEntity } from '@n8n/db'; +import { TestDefinitionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { mockInstance } from 'n8n-core/test/utils'; import type { IWorkflowBase } from 'n8n-workflow'; -import { TestDefinitionRepository } from '@/databases/repositories/test-definition.repository.ee'; import { TestRunnerService } from '@/evaluation.ee/test-runner/test-runner.service.ee'; import { createAnnotationTags } from '@test-integration/db/executions'; diff --git a/packages/cli/test/integration/evaluation/test-runs.api.test.ts b/packages/cli/test/integration/evaluation/test-runs.api.test.ts index 6f98b5b6bc..21a9621008 100644 --- a/packages/cli/test/integration/evaluation/test-runs.api.test.ts +++ b/packages/cli/test/integration/evaluation/test-runs.api.test.ts @@ -1,12 +1,12 @@ import type { User } from '@n8n/db'; import type { TestDefinition } from '@n8n/db'; import { ProjectRepository } from '@n8n/db'; +import { TestDefinitionRepository } from '@n8n/db'; +import { TestRunRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { mockInstance } from 'n8n-core/test/utils'; import type { IWorkflowBase } from 'n8n-workflow'; -import { TestDefinitionRepository } from '@/databases/repositories/test-definition.repository.ee'; -import { TestRunRepository } from '@/databases/repositories/test-run.repository.ee'; import { TestRunnerService } from '@/evaluation.ee/test-runner/test-runner.service.ee'; import { createUserShell } from '@test-integration/db/users'; import { createWorkflow } from '@test-integration/db/workflows'; diff --git a/packages/cli/test/integration/import.service.test.ts b/packages/cli/test/integration/import.service.test.ts index e389408d22..403fcb95a5 100644 --- a/packages/cli/test/integration/import.service.test.ts +++ b/packages/cli/test/integration/import.service.test.ts @@ -2,13 +2,13 @@ import type { Project } from '@n8n/db'; import type { User } from '@n8n/db'; import { TagEntity } from '@n8n/db'; import { CredentialsRepository } from '@n8n/db'; +import { TagRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { mock } from 'jest-mock-extended'; import type { INode } from 'n8n-workflow'; import { v4 as uuid } from 'uuid'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; -import { TagRepository } from '@/databases/repositories/tag.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { ImportService } from '@/services/import.service'; diff --git a/packages/cli/test/integration/license-metrics.repository.test.ts b/packages/cli/test/integration/license-metrics.repository.test.ts index e6e1b8e85a..0b4e3f7670 100644 --- a/packages/cli/test/integration/license-metrics.repository.test.ts +++ b/packages/cli/test/integration/license-metrics.repository.test.ts @@ -1,9 +1,8 @@ import { StatisticsNames } from '@n8n/db'; import { LicenseMetricsRepository } from '@n8n/db'; +import { WorkflowStatisticsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; -import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository'; - import { createManyCredentials } from './shared/db/credentials'; import { createAdmin, createMember, createOwner, createUser } from './shared/db/users'; import { createManyWorkflows } from './shared/db/workflows'; diff --git a/packages/cli/test/integration/public-api/endpoints-with-scopes-enabled.test.ts b/packages/cli/test/integration/public-api/endpoints-with-scopes-enabled.test.ts index ab27959b7e..0bcf8292f4 100644 --- a/packages/cli/test/integration/public-api/endpoints-with-scopes-enabled.test.ts +++ b/packages/cli/test/integration/public-api/endpoints-with-scopes-enabled.test.ts @@ -2,13 +2,13 @@ import type { TagEntity } from '@n8n/db'; import { ApiKeyRepository } from '@n8n/db'; import { CredentialsRepository } from '@n8n/db'; import { ProjectRepository } from '@n8n/db'; +import { TagRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { randomString } from 'n8n-workflow'; import validator from 'validator'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; -import { TagRepository } from '@/databases/repositories/tag.repository'; import { getOwnerOnlyApiKeyScopes } from '@/public-api/permissions.ee'; import { affixRoleToSaveCredential, createCredentials } from '@test-integration/db/credentials'; import { createErrorExecution, createSuccessfulExecution } from '@test-integration/db/executions'; diff --git a/packages/cli/test/integration/public-api/tags.test.ts b/packages/cli/test/integration/public-api/tags.test.ts index a5dc78afe4..e1e594da8c 100644 --- a/packages/cli/test/integration/public-api/tags.test.ts +++ b/packages/cli/test/integration/public-api/tags.test.ts @@ -1,8 +1,7 @@ import type { User } from '@n8n/db'; +import { TagRepository } from '@n8n/db'; import { Container } from '@n8n/di'; -import { TagRepository } from '@/databases/repositories/tag.repository'; - import { createTag } from '../shared/db/tags'; import { createMemberWithApiKey, createOwnerWithApiKey } from '../shared/db/users'; import * as testDb from '../shared/test-db'; diff --git a/packages/cli/test/integration/public-api/workflows.test.ts b/packages/cli/test/integration/public-api/workflows.test.ts index 4b2c07a880..038ad4b779 100644 --- a/packages/cli/test/integration/public-api/workflows.test.ts +++ b/packages/cli/test/integration/public-api/workflows.test.ts @@ -3,6 +3,7 @@ import type { Project } from '@n8n/db'; import type { TagEntity } from '@n8n/db'; import type { User } from '@n8n/db'; import { ProjectRepository } from '@n8n/db'; +import { WorkflowHistoryRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { InstanceSettings } from 'n8n-core'; import type { INode } from 'n8n-workflow'; @@ -10,7 +11,6 @@ import type { INode } from 'n8n-workflow'; import { ActiveWorkflowManager } from '@/active-workflow-manager'; import { STARTING_NODES } from '@/constants'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; -import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository'; import { ExecutionService } from '@/executions/execution.service'; import { ProjectService } from '@/services/project.service.ee'; import { Telemetry } from '@/telemetry'; diff --git a/packages/cli/test/integration/shared/db/tags.ts b/packages/cli/test/integration/shared/db/tags.ts index c191351f40..5c96f51e45 100644 --- a/packages/cli/test/integration/shared/db/tags.ts +++ b/packages/cli/test/integration/shared/db/tags.ts @@ -1,12 +1,11 @@ -import { generateNanoId } from '@n8n/db'; import type { TagEntity } from '@n8n/db'; import type { WorkflowEntity } from '@n8n/db'; +import { generateNanoId } from '@n8n/db'; +import { TagRepository } from '@n8n/db'; +import { WorkflowTagMappingRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { IWorkflowBase } from 'n8n-workflow'; -import { TagRepository } from '@/databases/repositories/tag.repository'; -import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository'; - import { randomName } from '../random'; export async function createTag(attributes: Partial = {}, workflow?: IWorkflowBase) { diff --git a/packages/cli/test/integration/shared/db/variables.ts b/packages/cli/test/integration/shared/db/variables.ts index 0ea1a6eb09..9f1835533b 100644 --- a/packages/cli/test/integration/shared/db/variables.ts +++ b/packages/cli/test/integration/shared/db/variables.ts @@ -1,9 +1,8 @@ import { generateNanoId } from '@n8n/db'; +import { VariablesRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { randomString } from 'n8n-workflow'; -import { VariablesRepository } from '@/databases/repositories/variables.repository'; - export async function createVariable(key = randomString(5), value = randomString(5)) { return await Container.get(VariablesRepository).save({ id: generateNanoId(), key, value }); } diff --git a/packages/cli/test/integration/shared/db/workflow-history.ts b/packages/cli/test/integration/shared/db/workflow-history.ts index 9a7ad68c0c..a93f09d857 100644 --- a/packages/cli/test/integration/shared/db/workflow-history.ts +++ b/packages/cli/test/integration/shared/db/workflow-history.ts @@ -1,9 +1,8 @@ import type { WorkflowHistory } from '@n8n/db'; +import { WorkflowHistoryRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { v4 as uuid } from 'uuid'; -import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository'; - export async function createWorkflowHistoryItem( workflowId: string, data?: Partial, diff --git a/packages/cli/test/integration/shared/db/workflow-statistics.ts b/packages/cli/test/integration/shared/db/workflow-statistics.ts index 4b190bf3f1..6f4f9520a1 100644 --- a/packages/cli/test/integration/shared/db/workflow-statistics.ts +++ b/packages/cli/test/integration/shared/db/workflow-statistics.ts @@ -1,9 +1,8 @@ import { StatisticsNames, type WorkflowStatistics } from '@n8n/db'; +import { WorkflowStatisticsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { Workflow } from 'n8n-workflow'; -import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository'; - export async function createWorkflowStatisticsItem( workflowId: Workflow['id'], data?: Partial, diff --git a/packages/cli/test/integration/tags.api.test.ts b/packages/cli/test/integration/tags.api.test.ts index 1089925d9d..2da913730c 100644 --- a/packages/cli/test/integration/tags.api.test.ts +++ b/packages/cli/test/integration/tags.api.test.ts @@ -1,7 +1,6 @@ +import { TagRepository } from '@n8n/db'; import { Container } from '@n8n/di'; -import { TagRepository } from '@/databases/repositories/tag.repository'; - import { createUserShell } from './shared/db/users'; import * as testDb from './shared/test-db'; import type { SuperAgentTest } from './shared/types'; diff --git a/packages/cli/test/integration/variables.test.ts b/packages/cli/test/integration/variables.test.ts index 1670540490..526a3ba682 100644 --- a/packages/cli/test/integration/variables.test.ts +++ b/packages/cli/test/integration/variables.test.ts @@ -1,8 +1,8 @@ -import { generateNanoId } from '@n8n/db'; import type { Variables } from '@n8n/db'; +import { generateNanoId } from '@n8n/db'; +import { VariablesRepository } from '@n8n/db'; import { Container } from '@n8n/di'; -import { VariablesRepository } from '@/databases/repositories/variables.repository'; import { VariablesService } from '@/environments.ee/variables/variables.service.ee'; import { CacheService } from '@/services/cache/cache.service'; diff --git a/packages/cli/test/integration/workflow-history-manager.test.ts b/packages/cli/test/integration/workflow-history-manager.test.ts index b8e2cf2a91..1152283bc4 100644 --- a/packages/cli/test/integration/workflow-history-manager.test.ts +++ b/packages/cli/test/integration/workflow-history-manager.test.ts @@ -1,9 +1,9 @@ import { GlobalConfig } from '@n8n/config'; +import { WorkflowHistoryRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { In } from '@n8n/typeorm'; import { DateTime } from 'luxon'; -import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository'; import { License } from '@/license'; import { WorkflowHistoryManager } from '@/workflows/workflow-history.ee/workflow-history-manager.ee'; diff --git a/packages/cli/test/integration/workflow-tag-mapping.repository.integration.test.ts b/packages/cli/test/integration/workflow-tag-mapping.repository.integration.test.ts index 9b0bf6078f..a47878646e 100644 --- a/packages/cli/test/integration/workflow-tag-mapping.repository.integration.test.ts +++ b/packages/cli/test/integration/workflow-tag-mapping.repository.integration.test.ts @@ -1,8 +1,7 @@ +import { TagRepository } from '@n8n/db'; +import { WorkflowTagMappingRepository } from '@n8n/db'; import { Container } from '@n8n/di'; -import { TagRepository } from '@/databases/repositories/tag.repository'; -import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository'; - import { createWorkflow } from './shared/db/workflows'; import * as testDb from './shared/test-db'; diff --git a/packages/cli/test/integration/workflows/workflows.controller.ee.test.ts b/packages/cli/test/integration/workflows/workflows.controller.ee.test.ts index fe5769ab78..784c94c572 100644 --- a/packages/cli/test/integration/workflows/workflows.controller.ee.test.ts +++ b/packages/cli/test/integration/workflows/workflows.controller.ee.test.ts @@ -2,6 +2,7 @@ import type { Project } from '@n8n/db'; import type { User } from '@n8n/db'; import type { WorkflowWithSharingsMetaDataAndCredentials } from '@n8n/db'; import { ProjectRepository } from '@n8n/db'; +import { WorkflowHistoryRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { ProjectRole } from '@n8n/permissions'; import { ApplicationError, WorkflowActivationError, type INode } from 'n8n-workflow'; @@ -10,7 +11,6 @@ import { v4 as uuid } from 'uuid'; import { ActiveWorkflowManager } from '@/active-workflow-manager'; import config from '@/config'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; -import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { UserManagementMailer } from '@/user-management/email'; import { mockInstance } from '@test/mocking'; diff --git a/packages/cli/test/integration/workflows/workflows.controller.test.ts b/packages/cli/test/integration/workflows/workflows.controller.test.ts index a8961b44cb..ac4335a74f 100644 --- a/packages/cli/test/integration/workflows/workflows.controller.test.ts +++ b/packages/cli/test/integration/workflows/workflows.controller.test.ts @@ -1,6 +1,7 @@ import type { User } from '@n8n/db'; import type { ListQueryDb } from '@n8n/db'; import { ProjectRepository } from '@n8n/db'; +import { WorkflowHistoryRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { Scope } from '@n8n/permissions'; import { DateTime } from 'luxon'; @@ -9,7 +10,6 @@ import { v4 as uuid } from 'uuid'; import { ActiveWorkflowManager } from '@/active-workflow-manager'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; -import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository'; import type { WorkflowFolderUnionFull } from '@/databases/repositories/workflow.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { License } from '@/license'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 190d49fd67..f8801e31d3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21982,7 +21982,7 @@ snapshots: eslint-import-resolver-node@0.3.9: dependencies: - debug: 3.2.7(supports-color@5.5.0) + debug: 3.2.7(supports-color@8.1.1) is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: @@ -22007,7 +22007,7 @@ snapshots: eslint-module-utils@2.8.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): dependencies: - debug: 3.2.7(supports-color@5.5.0) + debug: 3.2.7(supports-color@8.1.1) optionalDependencies: '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.8.2) eslint: 8.57.0 @@ -22027,7 +22027,7 @@ snapshots: array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 - debug: 3.2.7(supports-color@5.5.0) + debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -22846,7 +22846,7 @@ snapshots: array-parallel: 0.1.3 array-series: 0.1.5 cross-spawn: 7.0.6 - debug: 3.2.7(supports-color@5.5.0) + debug: 3.2.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -25707,7 +25707,7 @@ snapshots: pdf-parse@1.1.1: dependencies: - debug: 3.2.7(supports-color@5.5.0) + debug: 3.2.7(supports-color@8.1.1) node-ensure: 0.0.0 transitivePeerDependencies: - supports-color @@ -26546,7 +26546,7 @@ snapshots: rhea@1.0.24: dependencies: - debug: 3.2.7(supports-color@5.5.0) + debug: 3.2.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color