UpdateNicUseCase.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System.ComponentModel.DataAnnotations;
  2. using RackPeek.Domain.Helpers;
  3. using RackPeek.Domain.Resources.Hardware.Models;
  4. namespace RackPeek.Domain.Resources.Hardware.Servers.Nics;
  5. public class UpdateNicUseCase(IHardwareRepository repository) : IUseCase
  6. {
  7. public async Task ExecuteAsync(
  8. string name,
  9. int index,
  10. string? type,
  11. double? speed,
  12. int? ports)
  13. {
  14. // ToDo pass in properties as inputs, construct the entity in the usecase, ensure optional inputs are nullable
  15. // ToDo validate / normalize all inputs
  16. name = Normalize.HardwareName(name);
  17. ThrowIfInvalid.ResourceName(name);
  18. if (speed.HasValue)
  19. {
  20. ThrowIfInvalid.NicSpeed(speed.Value);
  21. }
  22. if (ports.HasValue)
  23. {
  24. ThrowIfInvalid.NicPorts(ports.Value);
  25. }
  26. var nicType = Normalize.NicType(type);
  27. ThrowIfInvalid.NicType(nicType);
  28. var hardware = await repository.GetByNameAsync(name);
  29. if (hardware is not Server server)
  30. throw new NotFoundException($"Server: '{name}' not found.");
  31. server.Nics ??= [];
  32. if (index < 0 || index >= server.Nics.Count)
  33. throw new ValidationException("NIC index out of range.");
  34. var nic = server.Nics[index];
  35. nic.Type = nicType;
  36. nic.Speed = speed;
  37. nic.Ports = ports;
  38. await repository.UpdateAsync(server);
  39. }
  40. }