DescribeLaptopUseCase.cs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using RackPeek.Domain.Helpers;
  2. using RackPeek.Domain.Persistence;
  3. namespace RackPeek.Domain.Resources.Laptops;
  4. public class DescribeLaptopUseCase(IResourceCollection 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. laptop.Labels
  23. );
  24. }
  25. }
  26. public record LaptopDescription(
  27. string Name,
  28. int CpuCount,
  29. string? RamSummary,
  30. int DriveCount,
  31. int GpuCount,
  32. Dictionary<string, string> Labels
  33. );