LaptopGetCommand.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using Microsoft.Extensions.DependencyInjection;
  2. using RackPeek.Domain.Resources.Laptops;
  3. using RackPeek.Domain.UseCases;
  4. using Spectre.Console;
  5. using Spectre.Console.Cli;
  6. namespace Shared.Rcl.Commands.Laptops;
  7. public class LaptopGetCommand(IServiceProvider provider)
  8. : AsyncCommand {
  9. public override async Task<int> ExecuteAsync(
  10. CommandContext context,
  11. CancellationToken cancellationToken) {
  12. using IServiceScope scope = provider.CreateScope();
  13. IGetAllResourcesByKindUseCase<Laptop> useCase =
  14. scope.ServiceProvider.GetRequiredService<IGetAllResourcesByKindUseCase<Laptop>>();
  15. IReadOnlyList<Laptop> laptops = await useCase.ExecuteAsync();
  16. if (laptops.Count == 0) {
  17. AnsiConsole.MarkupLine("[yellow]No Laptops found.[/]");
  18. return 0;
  19. }
  20. Table table = new Table()
  21. .Border(TableBorder.Rounded)
  22. .AddColumn("Name")
  23. .AddColumn("CPUs")
  24. .AddColumn("RAM")
  25. .AddColumn("Drives")
  26. .AddColumn("GPUs");
  27. foreach (Laptop d in laptops)
  28. table.AddRow(
  29. d.Name,
  30. (d.Cpus?.Count ?? 0).ToString(),
  31. d.Ram == null ? "None" : $"{d.Ram.Size}GB",
  32. (d.Drives?.Count ?? 0).ToString(),
  33. (d.Gpus?.Count ?? 0).ToString()
  34. );
  35. AnsiConsole.Write(table);
  36. return 0;
  37. }
  38. }