DescribeSystemUseCase.cs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using RackPeek.Domain.Helpers;
  2. using RackPeek.Domain.Persistence;
  3. namespace RackPeek.Domain.Resources.SystemResources.UseCases;
  4. public record SystemDescription(
  5. string Name,
  6. string? Type,
  7. string? Os,
  8. int Cores,
  9. double RamGb,
  10. int TotalStorageGb,
  11. string? RunsOn,
  12. Dictionary<string, string> Labels
  13. );
  14. public class DescribeSystemUseCase(IResourceCollection repository) : IUseCase
  15. {
  16. public async Task<SystemDescription> ExecuteAsync(string name)
  17. {
  18. name = Normalize.SystemName(name);
  19. ThrowIfInvalid.ResourceName(name);
  20. var system = await repository.GetByNameAsync(name) as SystemResource;
  21. if (system is null)
  22. throw new NotFoundException($"System '{name}' not found.");
  23. return new SystemDescription(
  24. system.Name,
  25. system.Type,
  26. system.Os,
  27. system.Cores ?? 0,
  28. system.Ram ?? 0,
  29. system.Drives?.Sum(d => d.Size) ?? 0,
  30. system.RunsOn,
  31. system.Labels
  32. );
  33. }
  34. }