GetServerSystemTreeUseCase.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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.Servers;
  5. public class GetServerSystemTreeUseCase(
  6. IHardwareRepository hardwareRepository,
  7. ISystemRepository systemRepository,
  8. IServiceRepository serviceRepository)
  9. {
  10. public async Task<HardwareDependencyTree?> ExecuteAsync(string hardwareName)
  11. {
  12. var server = await hardwareRepository.GetByNameAsync(hardwareName) as Server;
  13. if (server is null) return null;
  14. return await BuildDependencyTreeAsync(server);
  15. }
  16. private async Task<HardwareDependencyTree> BuildDependencyTreeAsync(Server server)
  17. {
  18. var systems = await systemRepository.GetByPhysicalHostAsync(server.Name);
  19. var systemTrees = new List<SystemDependencyTree>();
  20. foreach (var system in systems)
  21. {
  22. systemTrees.Add(await BuildSystemDependencyTreeAsync(system));
  23. }
  24. return new HardwareDependencyTree(server, systemTrees);
  25. }
  26. private async Task<SystemDependencyTree> BuildSystemDependencyTreeAsync(SystemResource system)
  27. {
  28. var services = await serviceRepository.GetBySystemHostAsync(system.Name);
  29. return new SystemDependencyTree(system, services);
  30. }
  31. }
  32. public sealed class HardwareDependencyTree(Server hardware, IEnumerable<SystemDependencyTree> systems)
  33. {
  34. public Server Hardware { get; } = hardware;
  35. public IEnumerable<SystemDependencyTree> Systems { get; } = systems;
  36. }
  37. public sealed class SystemDependencyTree(SystemResource system, IEnumerable<Service> services)
  38. {
  39. public SystemResource System { get; } = system;
  40. public IEnumerable<Service> Services { get; } = services;
  41. }