GetDesktopSystemTreeUseCase.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using RackPeek.Domain.Resources.Hardware.Models;
  2. using RackPeek.Domain.Resources.Services;
  3. using RackPeek.Domain.Resources.SystemResources;
  4. namespace RackPeek.Domain.Resources.Hardware.Desktops;
  5. public class GetDesktopSystemTreeUseCase(
  6. IHardwareRepository hardwareRepository,
  7. ISystemRepository systemRepository,
  8. IServiceRepository serviceRepository) : IUseCase
  9. {
  10. public async Task<HardwareDependencyTree?> ExecuteAsync(string hardwareName)
  11. {
  12. if (string.IsNullOrWhiteSpace(hardwareName))
  13. return null;
  14. var desktop = await hardwareRepository.GetByNameAsync(hardwareName) as Desktop;
  15. if (desktop is null)
  16. return null;
  17. return await BuildDependencyTreeAsync(desktop);
  18. }
  19. private async Task<HardwareDependencyTree> BuildDependencyTreeAsync(Desktop desktop)
  20. {
  21. var systems = await systemRepository.GetByPhysicalHostAsync(desktop.Name);
  22. var systemTrees = new List<SystemDependencyTree>();
  23. foreach (var system in systems)
  24. systemTrees.Add(await BuildSystemDependencyTreeAsync(system));
  25. return new HardwareDependencyTree(desktop, systemTrees);
  26. }
  27. private async Task<SystemDependencyTree> BuildSystemDependencyTreeAsync(SystemResource system)
  28. {
  29. var services = await serviceRepository.GetBySystemHostAsync(system.Name);
  30. return new SystemDependencyTree(system, services);
  31. }
  32. }
  33. public sealed class HardwareDependencyTree(Desktop hardware, IEnumerable<SystemDependencyTree> systems)
  34. {
  35. public Desktop Hardware { get; } = hardware;
  36. public IEnumerable<SystemDependencyTree> Systems { get; } = systems;
  37. }
  38. public sealed class SystemDependencyTree(SystemResource system, IEnumerable<Service> services)
  39. {
  40. public SystemResource System { get; } = system;
  41. public IEnumerable<Service> Services { get; } = services;
  42. }