DescribeServiceUseCase.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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. ThrowIfInvalid.ResourceName(name);
  18. var service = await repository.GetByNameAsync(name);
  19. if (service is null)
  20. return null;
  21. string? runsOnPhysicalHost = null;
  22. if (!string.IsNullOrEmpty(service.RunsOn))
  23. {
  24. var systemResource = await systemRepo.GetByNameAsync(service.RunsOn);
  25. runsOnPhysicalHost = systemResource?.RunsOn;
  26. }
  27. return new ServiceDescription(
  28. service.Name,
  29. service.Network?.Ip,
  30. service.Network?.Port,
  31. service.Network?.Protocol,
  32. service.Network?.Url,
  33. service.RunsOn,
  34. runsOnPhysicalHost
  35. );
  36. }
  37. }