AddNicUseCase.cs 991 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. using RackPeek.Domain.Helpers;
  2. using RackPeek.Domain.Resources.Hardware.Models;
  3. namespace RackPeek.Domain.Resources.Hardware.Servers.Nics;
  4. public class AddNicUseCase(IHardwareRepository repository) : IUseCase
  5. {
  6. public async Task ExecuteAsync(
  7. string name,
  8. string type,
  9. int speed,
  10. int ports)
  11. {
  12. name = Normalize.HardwareName(name);
  13. ThrowIfInvalid.ResourceName(name);
  14. ThrowIfInvalid.NicSpeed(speed);
  15. ThrowIfInvalid.NicPorts(ports);
  16. var nicType = Normalize.NicType(type);
  17. ThrowIfInvalid.NicType(nicType);
  18. var hardware = await repository.GetByNameAsync(name);
  19. if (hardware is not Server server)
  20. throw new NotFoundException($"Server: '{name}' not found.");
  21. server.Nics ??= [];
  22. server.Nics.Add(new Nic
  23. {
  24. Type = nicType,
  25. Speed = speed,
  26. Ports = ports
  27. });
  28. await repository.UpdateAsync(server);
  29. }
  30. }