| 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(); |
| } |
| } |
|
|