GetSystemServiceTreeUseCase.cs 773 B

123456789101112131415161718192021
  1. using RackPeek.Domain.Helpers;
  2. using RackPeek.Domain.Persistence;
  3. using RackPeek.Domain.Resources.Hardware;
  4. using RackPeek.Domain.Resources.Services;
  5. namespace RackPeek.Domain.Resources.SystemResources.UseCases;
  6. public class GetSystemServiceTreeUseCase(
  7. IResourceCollection repo) : IUseCase
  8. {
  9. public async Task<SystemDependencyTree> ExecuteAsync(string name)
  10. {
  11. name = Normalize.SystemName(name);
  12. ThrowIfInvalid.ResourceName(name);
  13. var system = await repo.GetByNameAsync(name) as SystemResource;
  14. if (system is null) throw new NotFoundException($"System '{name}' not found.");
  15. var services = await repo.GetDependantsAsync(system.Name);
  16. return new SystemDependencyTree(system, services.OfType<Service>());
  17. }
  18. }