using System;
using System.CommandLine;
using System.IO;
using Spectre.Console;
namespace Migrato.Cli.Commands;
///
/// Scaffolds a new, empty migration file
///
internal static class CreateCommand
{
public static Command Build()
{
var nameArgument = new Argument("name")
{
Description = "Name of the migration"
};
var command = new Command("create", "Creates a new migration file")
{
nameArgument,
MigrationOptions.Dir
};
command.SetAction(parseResult =>
{
var name = parseResult.GetValue(nameArgument)!;
var dir = parseResult.GetValue(MigrationOptions.Dir)!;
Directory.CreateDirectory(dir);
var sanitizedName = string.Join('_', name.Split(' ', StringSplitOptions.RemoveEmptyEntries));
var version = DateTimeOffset.UtcNow.ToString("yyyyMMddHHmmss");
var fileName = $"{version}_{sanitizedName}.sql";
var path = Path.Combine(dir, fileName);
File.WriteAllText(path, "-- +migrato Up\n\n-- +migrato Down\n");
AnsiConsole.MarkupLineInterpolated($"Created migration [green]{fileName}[/]");
return 0;
});
return command;
}
}