| | import { Logger } from '@n8n/backend-common'; |
| | import { GlobalConfig } from '@n8n/config'; |
| | import { WorkflowRepository } from '@n8n/db'; |
| | import { Service } from '@n8n/di'; |
| | import { ErrorReporter } from 'n8n-core'; |
| | import type { IDataObject, Workflow } from 'n8n-workflow'; |
| |
|
| | import { isWorkflowIdValid } from '@/utils'; |
| |
|
| | @Service() |
| | export class WorkflowStaticDataService { |
| | constructor( |
| | private readonly globalConfig: GlobalConfig, |
| | private readonly logger: Logger, |
| | private readonly errorReporter: ErrorReporter, |
| | private readonly workflowRepository: WorkflowRepository, |
| | ) {} |
| |
|
| | |
| | async getStaticDataById(workflowId: string) { |
| | const workflowData = await this.workflowRepository.findOne({ |
| | select: ['staticData'], |
| | where: { id: workflowId }, |
| | }); |
| | return workflowData?.staticData ?? {}; |
| | } |
| |
|
| | |
| | async saveStaticData(workflow: Workflow): Promise<void> { |
| | if (workflow.staticData.__dataChanged === true) { |
| | |
| | if (isWorkflowIdValid(workflow.id)) { |
| | |
| | try { |
| | await this.saveStaticDataById(workflow.id, workflow.staticData); |
| | workflow.staticData.__dataChanged = false; |
| | } catch (error) { |
| | this.errorReporter.error(error); |
| | this.logger.error( |
| | |
| | `There was a problem saving the workflow with id "${workflow.id}" to save changed Data: "${error.message}"`, |
| | { workflowId: workflow.id }, |
| | ); |
| | } |
| | } |
| | } |
| | } |
| |
|
| | |
| | async saveStaticDataById(workflowId: string, newStaticData: IDataObject): Promise<void> { |
| | const qb = this.workflowRepository.createQueryBuilder('workflow'); |
| | await qb |
| | .update() |
| | .set({ |
| | staticData: newStaticData, |
| | updatedAt: () => { |
| | if (['mysqldb', 'mariadb'].includes(this.globalConfig.database.type)) { |
| | return 'updatedAt'; |
| | } |
| | return '"updatedAt"'; |
| | }, |
| | }) |
| | .where('id = :id', { id: workflowId }) |
| | .execute(); |
| | } |
| | } |
| |
|