UpdateCpuUseCase.cs 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using RackPeek.Domain.Helpers;
  2. using RackPeek.Domain.Resources.Models;
  3. namespace RackPeek.Domain.Resources.Hardware.Servers.Cpus;
  4. public class UpdateCpuUseCase(IHardwareRepository repository) : IUseCase
  5. {
  6. public async Task ExecuteAsync(
  7. string name,
  8. int index,
  9. string? model,
  10. int? cores,
  11. int? threads)
  12. {
  13. // ToDo pass in properties as inputs, construct the entity in the usecase
  14. // ToDo validate / normalize all inputs
  15. name = Normalize.HardwareName(name);
  16. ThrowIfInvalid.ResourceName(name);
  17. var hardware = await repository.GetByNameAsync(name);
  18. if (hardware is not Server server) return;
  19. server.Cpus ??= [];
  20. if (index < 0 || index >= server.Cpus.Count)
  21. throw new ArgumentOutOfRangeException(nameof(index), "CPU index out of range.");
  22. var cpu = server.Cpus[index];
  23. cpu.Model = model;
  24. cpu.Cores = cores;
  25. cpu.Threads = threads;
  26. await repository.UpdateAsync(server);
  27. }
  28. }