GetHardwareSystemTreeUseCase.cs 1.7 KB

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