GetHardwareSystemTreeUseCase.cs 1.8 KB

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