UpdateNicUseCase.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. int speed,
  12. int ports)
  13. {
  14. name = Normalize.HardwareName(name);
  15. ThrowIfInvalid.ResourceName(name);
  16. ThrowIfInvalid.NicSpeed(speed);
  17. ThrowIfInvalid.NicPorts(ports);
  18. var nicType = Normalize.NicType(type);
  19. ThrowIfInvalid.NicType(nicType);
  20. var hardware = await repository.GetByNameAsync(name);
  21. if (hardware is not Server server)
  22. throw new NotFoundException($"Server: '{name}' not found.");
  23. server.Nics ??= [];
  24. if (index < 0 || index >= server.Nics.Count)
  25. throw new ValidationException("NIC index out of range.");
  26. var nic = server.Nics[index];
  27. nic.Type = nicType;
  28. nic.Speed = speed;
  29. nic.Ports = ports;
  30. await repository.UpdateAsync(server);
  31. }
  32. }