AddSystemDriveUseCase.cs 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. using RackPeek.Domain.Helpers;
  2. using RackPeek.Domain.Resources.Models;
  3. namespace RackPeek.Domain.Resources.SystemResources.UseCases;
  4. public class AddSystemDriveUseCase(ISystemRepository repository) : IUseCase
  5. {
  6. public async Task ExecuteAsync(string systemName, string driveType, int size)
  7. {
  8. // ToDo pass in properties as inputs, construct the entity in the usecase, ensure optional inputs are nullable
  9. // ToDo validate / normalize all inputs
  10. ThrowIfInvalid.ResourceName(systemName);
  11. var driveTypeNormalized = Normalize.DriveType(driveType);
  12. ThrowIfInvalid.DriveType(driveTypeNormalized);
  13. ThrowIfInvalid.DriveSize(size);
  14. var system = await repository.GetByNameAsync(systemName)
  15. ?? throw new NotFoundException($"System '{systemName}' not found.");
  16. system.Drives ??= new List<Drive>();
  17. system.Drives.Add(new Drive
  18. {
  19. Type = driveTypeNormalized,
  20. Size = size
  21. });
  22. await repository.UpdateAsync(system);
  23. }
  24. }