Добавлена минификация html

This commit is contained in:
FrigaT
2025-12-26 21:11:29 +03:00
parent c71e15c37f
commit 3c2ee7f9a7
10 changed files with 702 additions and 183 deletions

View File

@@ -0,0 +1,12 @@
namespace SQLLinter.Infrastructure.Diagram;
/// <summary>
/// Типы связей между узлами BPMN
/// </summary>
public enum BpmnArrowType
{
/// <summary> Обычная связь </summary>
Default,
/// <summary> Пунктирная связь (например, для вызова подпроцесса) </summary>
Dashed,
}

View File

@@ -0,0 +1,13 @@
namespace SQLLinter.Infrastructure.Diagram;
/// <summary>
/// Диаграмма BPMN, объединяющая процессы
/// </summary>
public class BpmnDiagram
{
/// <summary> Процессы диаграммы </summary>
public List<BpmnProcess> Processes { get; set; } = new();
/// <summary> Глобальные связи между процессами </summary>
public List<BpmnEdge> GlobalEdges { get; set; } = new();
}

View File

@@ -0,0 +1,34 @@
namespace SQLLinter.Infrastructure.Diagram;
/// <summary>
/// Расширения для диаграммы BPMN
/// </summary>
public static class BpmnDiagramExtensions
{
/// <summary>
/// Добавления отсутсвующих связей между процессами и их подпроцессами
/// </summary>
/// <param name="diagram"></param>
public static void AddMissingProcessEdges(this BpmnDiagram diagram)
{
foreach (var subprocess in diagram.Processes
.SelectMany(p => p.Nodes.Select(n => new { node = n, procId = p.Id }))
.Where(n => n.node.Type == BpmnNodeType.Subprocess && !string.IsNullOrEmpty(n.node.SubprocessId) && n.node.SubprocessId != n.procId)
.Select(n => n.node)
)
{
if (diagram.Processes.Any(p => p.Id == subprocess.SubprocessId)
&& !diagram.GlobalEdges.Any(t => t.From == subprocess.Id && t.To == subprocess.SubprocessId)
)
{
// Добавить пунктирный край от узла подпроцесса к началу подпроцесса
diagram.GlobalEdges.Add(new BpmnEdge
{
From = subprocess.Id,
To = subprocess.SubprocessId + "_start",
ArrowType = BpmnArrowType.Dashed,
});
}
}
}
}

View File

@@ -0,0 +1,19 @@
namespace SQLLinter.Infrastructure.Diagram;
/// <summary>
/// Связь между узлами BPMN
/// </summary>
public class BpmnEdge
{
/// <summary> Идентификатор узла-источника </summary>
public string From { get; set; } = string.Empty;
/// <summary> Идентификатор узла-приемника </summary>
public string To { get; set; } = string.Empty;
/// <summary> Метка/название связи </summary>
public string Label { get; set; } = string.Empty;
/// <summary> Тип стрелки связи </summary>
public BpmnArrowType ArrowType { get; set; } = BpmnArrowType.Default;
}

View File

@@ -0,0 +1,22 @@
namespace SQLLinter.Infrastructure.Diagram;
/// <summary>
/// Узел BPMN
/// </summary>
public class BpmnNode
{
///<summary> Уникальный идентификатор узла </summary>
public string Id { get; set; } = string.Empty;
///<summary> Метка/название узла </summary>
public string Label { get; set; } = string.Empty;
///<summary> Тип узла </summary>
public BpmnNodeType Type { get; set; }
/// <summary> Идентификатор подпроцесса (если тип узла - Subprocess) </summary>
public string SubprocessId { get; set; } = string.Empty;
/// <summary> Дополнительные свойства узла </summary>
public Dictionary<string, string> Properties { get; set; } = new();
}

View File

@@ -0,0 +1,20 @@
namespace SQLLinter.Infrastructure.Diagram;
/// <summary>
/// Типы узлов BPMN
/// </summary>
public enum BpmnNodeType
{
/// <summary> Стартовый узел процесса </summary>
Start,
/// <summary> Конечный узел процесса </summary>
End,
/// <summary> Задача </summary>
Task,
/// <summary> Шлюз (разветвление/объединение) </summary>
Gateway,
/// <summary> Шлюз (разветвление/объединение) </summary>
Hexagon,
/// <summary> Подпроцесс (вызов другого процесса) </summary>
Subprocess,
}

View File

@@ -0,0 +1,19 @@
namespace SQLLinter.Infrastructure.Diagram;
/// <summary>
/// Процесс BPMN
/// </summary>
public class BpmnProcess
{
/// <summary> Уникальный идентификатор процесса </summary>
public string Id { get; set; } = string.Empty;
/// <summary> Название процесса </summary>
public string Name { get; set; } = string.Empty;
/// <summary> Узлы процесса </summary>
public List<BpmnNode> Nodes { get; set; } = new();
/// <summary> Связи процесса </summary>
public List<BpmnEdge> Edges { get; set; } = new();
}