OtherDescribeCommand.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  1. using Microsoft.Extensions.DependencyInjection;
  2. using RackPeek.Domain.Resources.OtherHardware;
  3. using Spectre.Console;
  4. using Spectre.Console.Cli;
  5. namespace Shared.Rcl.Commands.OtherHardware;
  6. public class OtherDescribeCommand(IServiceProvider provider)
  7. : AsyncCommand<OtherNameSettings> {
  8. protected override async Task<int> ExecuteAsync(
  9. CommandContext context,
  10. OtherNameSettings settings,
  11. CancellationToken cancellationToken) {
  12. using IServiceScope scope = provider.CreateScope();
  13. DescribeOtherUseCase useCase = scope.ServiceProvider.GetRequiredService<DescribeOtherUseCase>();
  14. OtherDescription other = await useCase.ExecuteAsync(settings.Name);
  15. Grid grid = new Grid()
  16. .AddColumn()
  17. .AddColumn();
  18. grid.AddRow("Name:", other.Name.EscapeMarkup());
  19. grid.AddRow("Model:", (other.Model ?? "Unknown").EscapeMarkup());
  20. grid.AddRow("Description:", (other.Description ?? "Unknown").EscapeMarkup());
  21. if (other.Labels.Count > 0)
  22. grid.AddRow("Labels:", string.Join(", ", other.Labels.Select(kvp => $"{kvp.Key.EscapeMarkup()}: {kvp.Value.EscapeMarkup()}")));
  23. AnsiConsole.Write(new Panel(grid).Header("Other").Border(BoxBorder.Rounded));
  24. return 0;
  25. }
  26. }