ServerDriveAddCommand.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System.ComponentModel;
  2. using Microsoft.Extensions.DependencyInjection;
  3. using RackPeek.Domain.Resources.Hardware.Servers.Drives;
  4. using Spectre.Console;
  5. using Spectre.Console.Cli;
  6. namespace RackPeek.Commands.Servers.Drives;
  7. public class ServerDriveAddSettings : ServerNameSettings
  8. {
  9. [CommandOption("--type <TYPE>")]
  10. [Description("The drive type e.g hdd / ssd.")]
  11. public string Type { get; set; }
  12. [CommandOption("--size <SIZE>")]
  13. [Description("The drive capacity in GB.")]
  14. public int Size { get; set; }
  15. }
  16. public class ServerDriveAddCommand(IServiceProvider serviceProvider)
  17. : AsyncCommand<ServerDriveAddSettings>
  18. {
  19. public override async Task<int> ExecuteAsync(
  20. CommandContext context,
  21. ServerDriveAddSettings settings,
  22. CancellationToken cancellationToken)
  23. {
  24. using var scope = serviceProvider.CreateScope();
  25. var useCase = scope.ServiceProvider.GetRequiredService<AddDrivesUseCase>();
  26. await useCase.ExecuteAsync(
  27. settings.Name,
  28. settings.Type,
  29. settings.Size);
  30. AnsiConsole.MarkupLine($"[green]Drive added to '{settings.Name}'.[/]");
  31. return 0;
  32. }
  33. }