DescribeDesktopUseCase.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using RackPeek.Domain.Helpers;
  2. using RackPeek.Domain.Resources.Models;
  3. namespace RackPeek.Domain.Resources.Hardware.Desktops;
  4. public record DesktopDescription(
  5. string Name,
  6. string? Model,
  7. int CpuCount,
  8. string? RamSummary,
  9. int DriveCount,
  10. int NicCount,
  11. int GpuCount
  12. );
  13. public class DescribeDesktopUseCase(IHardwareRepository repository) : IUseCase
  14. {
  15. public async Task<DesktopDescription> ExecuteAsync(string name)
  16. {
  17. name = Normalize.HardwareName(name);
  18. ThrowIfInvalid.ResourceName(name);
  19. var desktop = await repository.GetByNameAsync(name) as Desktop;
  20. if (desktop == null)
  21. throw new NotFoundException($"Desktop '{name}' not found.");
  22. var ramSummary = desktop.Ram == null
  23. ? "None"
  24. : $"{desktop.Ram.Size} GB @ {desktop.Ram.Mts} MT/s";
  25. return new DesktopDescription(
  26. desktop.Name,
  27. desktop.Model,
  28. desktop.Cpus?.Count ?? 0,
  29. ramSummary,
  30. desktop.Drives?.Count ?? 0,
  31. desktop.Nics?.Count ?? 0,
  32. desktop.Gpus?.Count ?? 0
  33. );
  34. }
  35. }