using System.CommandLine;
using System.CommandLine.Parsing;
using ZB.MOM.WW.ScadaBridge.Commons.Messages.Management;
namespace ZB.MOM.WW.ScadaBridge.CLI.Commands;
///
/// CLI commands for managing database connection definitions.
///
public static class DbConnectionCommands
{
/// Builds the db-connection command with list, get, create, update, and delete sub-commands.
/// Global URL option.
/// Global output format option.
/// Global username option.
/// Global password option.
/// The configured db-connection command.
public static Command Build(Option urlOption, Option formatOption, Option usernameOption, Option passwordOption)
{
var command = new Command("db-connection") { Description = "Manage database connections" };
command.Add(BuildList(urlOption, formatOption, usernameOption, passwordOption));
command.Add(BuildGet(urlOption, formatOption, usernameOption, passwordOption));
command.Add(BuildCreate(urlOption, formatOption, usernameOption, passwordOption));
command.Add(BuildUpdate(urlOption, formatOption, usernameOption, passwordOption));
command.Add(BuildDelete(urlOption, formatOption, usernameOption, passwordOption));
return command;
}
private static Command BuildList(Option urlOption, Option formatOption, Option usernameOption, Option passwordOption)
{
var cmd = new Command("list") { Description = "List all database connections" };
cmd.SetAction(async (ParseResult result) =>
{
return await CommandHelpers.ExecuteCommandAsync(
result, urlOption, formatOption, usernameOption, passwordOption, new ListDatabaseConnectionsCommand());
});
return cmd;
}
private static Command BuildGet(Option urlOption, Option formatOption, Option usernameOption, Option passwordOption)
{
var idOption = new Option("--id") { Description = "Database connection ID", Required = true };
var cmd = new Command("get") { Description = "Get a database connection by ID" };
cmd.Add(idOption);
cmd.SetAction(async (ParseResult result) =>
{
var id = result.GetValue(idOption);
return await CommandHelpers.ExecuteCommandAsync(
result, urlOption, formatOption, usernameOption, passwordOption, new GetDatabaseConnectionCommand(id));
});
return cmd;
}
private static Command BuildCreate(Option urlOption, Option formatOption, Option usernameOption, Option passwordOption)
{
var nameOption = new Option("--name") { Description = "Connection name", Required = true };
var connStrOption = new Option("--connection-string") { Description = "Connection string", Required = true };
var cmd = new Command("create") { Description = "Create a database connection" };
cmd.Add(nameOption);
cmd.Add(connStrOption);
cmd.SetAction(async (ParseResult result) =>
{
var name = result.GetValue(nameOption)!;
var connStr = result.GetValue(connStrOption)!;
return await CommandHelpers.ExecuteCommandAsync(
result, urlOption, formatOption, usernameOption, passwordOption,
new CreateDatabaseConnectionDefCommand(name, connStr));
});
return cmd;
}
private static Command BuildUpdate(Option urlOption, Option formatOption, Option usernameOption, Option passwordOption)
{
var idOption = new Option("--id") { Description = "Database connection ID", Required = true };
var nameOption = new Option("--name") { Description = "Connection name", Required = true };
var connStrOption = new Option("--connection-string") { Description = "Connection string", Required = true };
var cmd = new Command("update") { Description = "Update a database connection" };
cmd.Add(idOption);
cmd.Add(nameOption);
cmd.Add(connStrOption);
cmd.SetAction(async (ParseResult result) =>
{
var id = result.GetValue(idOption);
var name = result.GetValue(nameOption)!;
var connStr = result.GetValue(connStrOption)!;
return await CommandHelpers.ExecuteCommandAsync(
result, urlOption, formatOption, usernameOption, passwordOption,
new UpdateDatabaseConnectionDefCommand(id, name, connStr));
});
return cmd;
}
private static Command BuildDelete(Option urlOption, Option formatOption, Option usernameOption, Option passwordOption)
{
var idOption = new Option("--id") { Description = "Database connection ID", Required = true };
var cmd = new Command("delete") { Description = "Delete a database connection" };
cmd.Add(idOption);
cmd.SetAction(async (ParseResult result) =>
{
var id = result.GetValue(idOption);
return await CommandHelpers.ExecuteCommandAsync(
result, urlOption, formatOption, usernameOption, passwordOption, new DeleteDatabaseConnectionDefCommand(id));
});
return cmd;
}
}