import { Column, Entity, Generated, Index, ManyToOne, OneToMany, OneToOne, PrimaryColumn, Relation, DeleteDateColumn, } from '@n8n/typeorm'; import { ExecutionStatus, WorkflowExecuteMode } from 'n8n-workflow'; import type { ExecutionAnnotation } from '@/databases/entities/execution-annotation.ee'; import { datetimeColumnType } from './abstract-entity'; import type { ExecutionData } from './execution-data'; import type { ExecutionMetadata } from './execution-metadata'; import { WorkflowEntity } from './workflow-entity'; import { idStringifier } from '../utils/transformers'; @Entity() @Index(['workflowId', 'id']) @Index(['waitTill', 'id']) @Index(['finished', 'id']) @Index(['workflowId', 'finished', 'id']) @Index(['workflowId', 'waitTill', 'id']) export class ExecutionEntity { @Generated() @PrimaryColumn({ transformer: idStringifier }) id: string; @Column() finished: boolean; @Column('varchar') mode: WorkflowExecuteMode; @Column({ nullable: true }) retryOf: string; @Column({ nullable: true }) retrySuccessId: string; @Column('varchar') status: ExecutionStatus; @Column(datetimeColumnType) createdAt: Date; /** * Time when the processing of the execution actually started. This column * is `null` when an execution is enqueued but has not started yet. */ @Column({ type: datetimeColumnType, nullable: true }) startedAt: Date | null; @Index() @Column({ type: datetimeColumnType, nullable: true }) stoppedAt: Date; @DeleteDateColumn({ type: datetimeColumnType, nullable: true }) deletedAt: Date; @Column({ nullable: true }) workflowId: string; @Column({ type: datetimeColumnType, nullable: true }) waitTill: Date | null; @OneToMany('ExecutionMetadata', 'execution') metadata: ExecutionMetadata[]; @OneToOne('ExecutionData', 'execution') executionData: Relation; @OneToOne('ExecutionAnnotation', 'execution') annotation?: Relation; @ManyToOne('WorkflowEntity') workflow: WorkflowEntity; }