DescribeLaptopUseCase.cs 1.0 KB

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