DescribeLaptopUseCase.cs 1019 B

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