77 lines
3.8 KiB
C#
77 lines
3.8 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Socialize.Api.Modules.Approvals.Data;
|
|
|
|
public static class ApprovalModelConfiguration
|
|
{
|
|
public static ModelBuilder ConfigureApprovalsModule(this ModelBuilder modelBuilder)
|
|
{
|
|
modelBuilder.Entity<ApprovalWorkflowInstance>(workflowInstance =>
|
|
{
|
|
workflowInstance.ToTable("ApprovalWorkflowInstances");
|
|
workflowInstance.HasKey(x => x.Id);
|
|
workflowInstance.Property(x => x.State).HasMaxLength(64).IsRequired();
|
|
workflowInstance.Property(x => x.ApprovalMode).HasMaxLength(64).IsRequired();
|
|
workflowInstance.Property(x => x.StartedAt)
|
|
.ValueGeneratedOnAdd()
|
|
.HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
workflowInstance.HasIndex(x => x.WorkspaceId);
|
|
workflowInstance.HasIndex(x => x.ContentItemId);
|
|
workflowInstance.HasIndex(x => new { x.ContentItemId, x.State })
|
|
.IsUnique()
|
|
.HasFilter("\"State\" = 'Pending'");
|
|
});
|
|
|
|
modelBuilder.Entity<ApprovalRequest>(approvalRequest =>
|
|
{
|
|
approvalRequest.ToTable("ApprovalRequests");
|
|
approvalRequest.HasKey(x => x.Id);
|
|
approvalRequest.Property(x => x.WorkflowStepTargetType).HasMaxLength(32);
|
|
approvalRequest.Property(x => x.WorkflowStepTargetValue).HasMaxLength(128);
|
|
approvalRequest.Property(x => x.Stage).HasMaxLength(64).IsRequired();
|
|
approvalRequest.Property(x => x.ReviewerName).HasMaxLength(256).IsRequired();
|
|
approvalRequest.Property(x => x.ReviewerEmail).HasMaxLength(256).IsRequired();
|
|
approvalRequest.Property(x => x.State).HasMaxLength(64).IsRequired();
|
|
approvalRequest.Property(x => x.AccessToken).HasMaxLength(64).IsRequired();
|
|
approvalRequest.Property(x => x.SentAt)
|
|
.ValueGeneratedOnAdd()
|
|
.HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
approvalRequest.HasIndex(x => x.WorkspaceId);
|
|
approvalRequest.HasIndex(x => x.ContentItemId);
|
|
approvalRequest.HasIndex(x => x.WorkflowInstanceId);
|
|
approvalRequest.HasIndex(x => x.ReviewerEmail);
|
|
});
|
|
|
|
modelBuilder.Entity<ApprovalDecision>(approvalDecision =>
|
|
{
|
|
approvalDecision.ToTable("ApprovalDecisions");
|
|
approvalDecision.HasKey(x => x.Id);
|
|
approvalDecision.Property(x => x.Decision).HasMaxLength(64).IsRequired();
|
|
approvalDecision.Property(x => x.Comment).HasMaxLength(2048);
|
|
approvalDecision.Property(x => x.DecidedByName).HasMaxLength(256).IsRequired();
|
|
approvalDecision.Property(x => x.DecidedByEmail).HasMaxLength(256).IsRequired();
|
|
approvalDecision.Property(x => x.CreatedAt)
|
|
.ValueGeneratedOnAdd()
|
|
.HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
approvalDecision.HasIndex(x => x.ApprovalRequestId);
|
|
});
|
|
|
|
modelBuilder.Entity<WorkspaceApprovalStepConfiguration>(approvalStep =>
|
|
{
|
|
approvalStep.ToTable("WorkspaceApprovalStepConfigurations");
|
|
approvalStep.HasKey(x => x.Id);
|
|
approvalStep.Property(x => x.Name).HasMaxLength(128).IsRequired();
|
|
approvalStep.Property(x => x.TargetType).HasMaxLength(32).IsRequired();
|
|
approvalStep.Property(x => x.TargetValue).HasMaxLength(128).IsRequired();
|
|
approvalStep.Property(x => x.RequiredApproverCount).HasDefaultValue(1);
|
|
approvalStep.Property(x => x.CreatedAt)
|
|
.ValueGeneratedOnAdd()
|
|
.HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
approvalStep.HasIndex(x => x.WorkspaceId);
|
|
approvalStep.HasIndex(x => new { x.WorkspaceId, x.SortOrder }).IsUnique();
|
|
});
|
|
|
|
return modelBuilder;
|
|
}
|
|
}
|