ServerDriveAddCommand.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using System.ComponentModel;
  2. using Microsoft.Extensions.DependencyInjection;
  3. using RackPeek.Domain.Resources.Servers;
  4. using RackPeek.Domain.UseCases.Drives;
  5. using Spectre.Console;
  6. using Spectre.Console.Cli;
  7. namespace Shared.Rcl.Commands.Servers.Drives;
  8. public class ServerDriveAddSettings : ServerNameSettings {
  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. public override async Task<int> ExecuteAsync(
  19. CommandContext context,
  20. ServerDriveAddSettings settings,
  21. CancellationToken cancellationToken) {
  22. using IServiceScope scope = serviceProvider.CreateScope();
  23. IAddDriveUseCase<Server> useCase = scope.ServiceProvider.GetRequiredService<IAddDriveUseCase<Server>>();
  24. await useCase.ExecuteAsync(
  25. settings.Name,
  26. settings.Type,
  27. settings.Size);
  28. AnsiConsole.MarkupLine($"[green]Drive added to '{settings.Name}'.[/]");
  29. return 0;
  30. }
  31. }