DescribeServiceUseCase.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using RackPeek.Domain.Helpers;
  2. using RackPeek.Domain.Resources.SystemResources;
  3. namespace RackPeek.Domain.Resources.Services.UseCases;
  4. public record ServiceDescription(
  5. string Name,
  6. string? Ip,
  7. int? Port,
  8. string? Protocol,
  9. string? Url,
  10. string? RunsOnSystemHost,
  11. string? RunsOnPhysicalHost
  12. );
  13. public class DescribeServiceUseCase(IServiceRepository repository, ISystemRepository systemRepo) : IUseCase
  14. {
  15. public async Task<ServiceDescription> ExecuteAsync(string name)
  16. {
  17. name = Normalize.ServiceName(name);
  18. ThrowIfInvalid.ResourceName(name);
  19. var service = await repository.GetByNameAsync(name);
  20. if (service is null)
  21. throw new NotFoundException($"Service '{name}' not found.");
  22. string? runsOnPhysicalHost = null;
  23. if (!string.IsNullOrEmpty(service.RunsOn))
  24. {
  25. var systemResource = await systemRepo.GetByNameAsync(service.RunsOn);
  26. runsOnPhysicalHost = systemResource?.RunsOn;
  27. }
  28. return new ServiceDescription(
  29. service.Name,
  30. service.Network?.Ip,
  31. service.Network?.Port,
  32. service.Network?.Protocol,
  33. service.Network?.Url,
  34. service.RunsOn,
  35. runsOnPhysicalHost
  36. );
  37. }
  38. }