DescribeDesktopUseCase.cs 1.1 KB

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