using Abp.Json; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using VberZero.Workflow.DesignInfo; using VberZero.Workflow.Persistence; namespace VberZero.Workflow; public static class ModelBuilderExtension { public static ModelBuilder ConfigWorkflow(this ModelBuilder modelBuilder) { modelBuilder .ConfigWorkflowDefinition() .ConfigWorkflowPersistence(); return modelBuilder; } private static ModelBuilder ConfigWorkflowDefinition(this ModelBuilder modelBuilder) { var builder = modelBuilder.Entity(); builder.Property(u => u.Id).HasColumnName(nameof(WorkflowDefinitionInfo.Id)).HasMaxLength(WorkflowDefinitionConst.IdMaxLength); builder.Property(u => u.Version).HasColumnName(nameof(WorkflowDefinitionInfo.Version)).HasDefaultValue(1); builder.HasKey(u => new { u.Id, u.Version }); builder.Property(u => u.Title).HasColumnName(nameof(WorkflowDefinitionInfo.Title)).HasMaxLength(WorkflowDefinitionConst.TitleMaxLength); builder.Property(u => u.Group).HasColumnName(nameof(WorkflowDefinitionInfo.Group)).HasMaxLength(WorkflowDefinitionConst.GroupMaxLength); builder.Property(u => u.Icon).HasColumnName(nameof(WorkflowDefinitionInfo.Icon)).HasMaxLength(WorkflowDefinitionConst.IconMaxLength); builder.Property(u => u.Color).HasColumnName(nameof(WorkflowDefinitionInfo.Color)).HasMaxLength(WorkflowDefinitionConst.ColorMaxLength); builder.Property(u => u.Inputs).HasColumnName(nameof(WorkflowDefinitionInfo.Inputs)).HasConversion(u => u.ToJsonString(false, false), u => u.FromJsonString>>()); builder.Property(u => u.Nodes).HasColumnName(nameof(WorkflowDefinitionInfo.Nodes)).HasConversion(u => u.ToJsonString(false, false), u => u.FromJsonString>()); builder.Property(u => u.TenantId).HasColumnName(nameof(WorkflowDefinitionInfo.TenantId)); return modelBuilder; } private static ModelBuilder ConfigWorkflowPersistence(this ModelBuilder modelBuilder) { var builder = modelBuilder.Entity(); builder.Property(u => u.WorkflowDefinitionId).HasColumnName(nameof(WorkflowInfo.WorkflowDefinitionId)).HasMaxLength(WorkflowConst.WorkflowDefinitionIdMaxLength); builder.Property(u => u.Version).HasColumnName(nameof(WorkflowInfo.Version)); builder.Property(u => u.Description).HasColumnName(nameof(WorkflowInfo.Description)).HasMaxLength(WorkflowConst.DescriptionMaxLength); builder.Property(u => u.Reference).HasColumnName(nameof(WorkflowInfo.Reference)).HasMaxLength(WorkflowConst.ReferenceMaxLength); builder.Property(u => u.NextExecution).HasColumnName(nameof(WorkflowInfo.NextExecution)); builder.Property(u => u.Data).HasColumnName(nameof(WorkflowInfo.Data)).HasMaxLength(WorkflowConst.DataMaxLength); builder.Property(u => u.CreateTime).HasColumnName(nameof(WorkflowInfo.CreateTime)); builder.Property(u => u.CompleteTime).HasColumnName(nameof(WorkflowInfo.CompleteTime)); builder.Property(u => u.Status).HasColumnName(nameof(WorkflowInfo.Status)); builder.Property(u => u.TenantId).HasColumnName(nameof(WorkflowInfo.TenantId)); //builder.Property(u => u.ExecutionPointers).HasColumnName(nameof(WorkflowInfo.ExecutionPointers)); //builder.HasMany(a => a.ExecutionPointers); builder.HasOne(u => u.WorkflowDefinitionInfo).WithMany().HasForeignKey(u => new { u.WorkflowDefinitionId, u.Version }); return modelBuilder; } }