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; } }