LaptopReportCommand.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using Microsoft.Extensions.DependencyInjection;
  2. using RackPeek.Domain.Resources.Laptops;
  3. using Shared.Rcl.Commands;
  4. using Spectre.Console;
  5. using Spectre.Console.Cli;
  6. namespace Shared.Rcl.Commands.Laptops;
  7. public class LaptopReportCommand(
  8. IServiceProvider serviceProvider
  9. ) : AsyncCommand {
  10. public override async Task<int> ExecuteAsync(CommandContext context, CancellationToken cancellationToken) {
  11. using IServiceScope scope = serviceProvider.CreateScope();
  12. LaptopHardwareReportUseCase useCase = scope.ServiceProvider.GetRequiredService<LaptopHardwareReportUseCase>();
  13. LaptopHardwareReport report = await useCase.ExecuteAsync();
  14. if (report.Laptops.Count == 0) {
  15. AnsiConsole.MarkupLine("[yellow]No Laptops found.[/]");
  16. return 0;
  17. }
  18. Table table = new Table()
  19. .Border(TableBorder.Rounded)
  20. .AddColumn("Name")
  21. .AddColumn("CPU")
  22. .AddColumn("C/T")
  23. .AddColumn("RAM")
  24. .AddColumn("Storage")
  25. .AddColumn("GPU");
  26. foreach (LaptopHardwareRow d in report.Laptops)
  27. table.AddRow(
  28. d.Name.EscapeMarkup(),
  29. d.CpuSummary.EscapeMarkup(),
  30. $"{d.TotalCores}/{d.TotalThreads}",
  31. $"{d.RamGb} GB",
  32. $"{d.TotalStorageGb} GB (SSD {d.SsdStorageGb} / HDD {d.HddStorageGb})",
  33. d.GpuSummary.EscapeMarkup()
  34. );
  35. AnsiConsole.Write(table);
  36. return 0;
  37. }
  38. }