feat: scaffold P_Rec_Annot .NET 8 architecture
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
namespace PRecAnnot.Application;
|
||||
|
||||
public sealed record PRecAnnotCommandDescriptor
|
||||
{
|
||||
public required string CommandName { get; init; }
|
||||
public required string DisplayName { get; init; }
|
||||
public required string UseCaseId { get; init; }
|
||||
public required string RibbonPanel { get; init; }
|
||||
public bool RequiresPlantProject { get; init; }
|
||||
public bool RequiresOrthoDrawing { get; init; }
|
||||
public bool RequiresSelection { get; init; }
|
||||
public string Status { get; init; } = "BLOCKED_WITH_REASON";
|
||||
}
|
||||
|
||||
public sealed class CommandRegistry
|
||||
{
|
||||
private readonly IReadOnlyDictionary<string, PRecAnnotCommandDescriptor> _commands;
|
||||
|
||||
public CommandRegistry(IEnumerable<PRecAnnotCommandDescriptor> commands)
|
||||
{
|
||||
var list = commands.ToList();
|
||||
if (list.GroupBy(x => x.CommandName, StringComparer.OrdinalIgnoreCase).Any(x => x.Count() > 1))
|
||||
throw new ArgumentException("Command names must be unique.", nameof(commands));
|
||||
_commands = list.ToDictionary(x => x.CommandName, StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
public IReadOnlyCollection<PRecAnnotCommandDescriptor> Commands => _commands.Values.ToArray();
|
||||
public bool TryGet(string name, out PRecAnnotCommandDescriptor? descriptor) => _commands.TryGetValue(name, out descriptor);
|
||||
|
||||
public static CommandRegistry Foundation() => new(new[]
|
||||
{
|
||||
new PRecAnnotCommandDescriptor { CommandName = "PHP_REC_ANNOT", DisplayName = "Аннотировать", UseCaseId = "ortho-annotation", RibbonPanel = "Аннотации", RequiresPlantProject = true, RequiresOrthoDrawing = true, Status = "BLOCKED_WITH_REASON" },
|
||||
new PRecAnnotCommandDescriptor { CommandName = "PXP-AAV", DisplayName = "Разместить аннотации автоматически", UseCaseId = "auto-annotate-view", RibbonPanel = "Аннотации", RequiresPlantProject = true, RequiresOrthoDrawing = true, Status = "BLOCKED_WITH_REASON" },
|
||||
new PRecAnnotCommandDescriptor { CommandName = "PXP-OA", DisplayName = "Разместить осевые линии и опоры", UseCaseId = "ortho-axes-supports", RibbonPanel = "Осевые линии и опоры", RequiresPlantProject = true, RequiresOrthoDrawing = true, Status = "BLOCKED_WITH_REASON" }
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user