DescribeLaptopUseCase.cs 1.1 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. 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.Ports?.Count ?? 0,
  21. laptop.Labels
  22. );
  23. }
  24. }
  25. public record LaptopDescription(
  26. string Name,
  27. int CpuCount,
  28. string? RamSummary,
  29. int DriveCount,
  30. int GpuCount,
  31. int NicCount,
  32. Dictionary<string, string> Labels
  33. );