UpdateServiceUseCase.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using RackPeek.Domain.Helpers;
  2. using RackPeek.Domain.Resources.SystemResources;
  3. namespace RackPeek.Domain.Resources.Services.UseCases;
  4. public class UpdateServiceUseCase(IServiceRepository repository, ISystemRepository systemRepo) : IUseCase
  5. {
  6. public async Task ExecuteAsync(
  7. string name,
  8. string? ip = null,
  9. int? port = null,
  10. string? protocol = null,
  11. string? url = null,
  12. string? runsOn = null
  13. )
  14. {
  15. name = Normalize.ServiceName(name);
  16. ThrowIfInvalid.ResourceName(name);
  17. var service = await repository.GetByNameAsync(name);
  18. if (service is null)
  19. throw new NotFoundException($"Service '{name}' not found.");
  20. if (!string.IsNullOrWhiteSpace(ip))
  21. {
  22. service.Network ??= new Network();
  23. service.Network.Ip = ip;
  24. }
  25. if (!string.IsNullOrWhiteSpace(protocol))
  26. {
  27. service.Network ??= new Network();
  28. service.Network.Protocol = protocol;
  29. }
  30. if (!string.IsNullOrWhiteSpace(url))
  31. {
  32. service.Network ??= new Network();
  33. service.Network.Url = url;
  34. }
  35. if (port.HasValue)
  36. {
  37. service.Network ??= new Network();
  38. service.Network.Port = port.Value;
  39. }
  40. if (!string.IsNullOrWhiteSpace(runsOn))
  41. {
  42. ThrowIfInvalid.ResourceName(runsOn);
  43. var parentSystem = await systemRepo.GetByNameAsync(runsOn);
  44. if (parentSystem == null) throw new NotFoundException($"Parent system '{runsOn}' not found.");
  45. service.RunsOn = runsOn;
  46. }
  47. await repository.UpdateAsync(service);
  48. }
  49. }