Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 61 additions & 1 deletion TopModel.Generator/Program.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.CommandLine;
using System.CommandLine;
using System.Diagnostics;
using System.Reflection;
using System.Security.Cryptography;
Expand Down Expand Up @@ -33,6 +33,66 @@

var command = new RootCommand("Lance le générateur topmodel.") { Name = "modgen" };

var initCommand = new Command("init", "Initialise un nouveau fichier de configuration topmodel.");
var initAppOption = new Option<string?>(["-a", "--app"], "Nom de l'application.");
var initFileOption = new Option<string?>(["-f", "--file"], "Nom du fichier de configuration à créer.");
initCommand.AddOption(initAppOption);
initCommand.AddOption(initFileOption);
initCommand.SetHandler(
(app, file) =>
{
var fileName = file ?? "topmodel.config";
var filePath = Path.GetFullPath(fileName);

if (File.Exists(filePath))
{
AnsiConsole.MarkupLine($"[red]Le fichier '{fileName}' existe déjà.[/]");
returnCode = 1;
return;
}

var appName = app ?? Path.GetFileName(Directory.GetCurrentDirectory());

var availableGenerators = new[] { "csharp", "jpa", "javascript", "sql" };
var selectedGenerators = AnsiConsole.Prompt(
new MultiSelectionPrompt<string>()
.Title("Sélectionnez les générateurs à utiliser :")
.NotRequired()
.PageSize(10)
.InstructionsText(
"[grey](Appuyez sur [blue]<espace>[/] pour sélectionner, [green]<entrée>[/] pour valider)[/]"
)
.AddChoices(availableGenerators)
);

var configBuilder = new StringBuilder();
configBuilder.AppendLine("---");
configBuilder.AppendLine($"app: {appName}");

foreach (var generator in selectedGenerators)
{
configBuilder.AppendLine();
configBuilder.AppendLine($"{generator}:");
configBuilder.AppendLine(" - tags:");
configBuilder.AppendLine(
$" - {((generator == "csharp" || generator == "jpa" || generator == "sql") ? "back" : "front")}"
);
configBuilder.AppendLine(" outputDirectory: ./generated");
}

File.WriteAllText(filePath, configBuilder.ToString());
AnsiConsole.MarkupLine($"[green]Fichier de configuration '{fileName}' créé avec succès.[/]");
AnsiConsole.MarkupLine($"[grey]Application : {appName}[/]");
if (selectedGenerators.Count > 0)
{
AnsiConsole.MarkupLine($"[grey]Générateurs : {string.Join(", ", selectedGenerators)}[/]");
}
},
initAppOption,
initFileOption
);
command.AddCommand(initCommand);

var fileOption = new Option<IEnumerable<FileInfo>>(["-f", "--file"], "Chemin vers un fichier de config.");
var excludeOption = new Option<IEnumerable<string>>(["-e", "--exclude"], "Tag à ignorer lors de la génération.");
var watchOption = new Option<bool>(["-w", "--watch"], "Lance le générateur en mode 'watch'");
Expand Down
1 change: 1 addition & 0 deletions TopModel.ModelGenerator/OpenApi/OpenApiUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ public static IDictionary<string, IOpenApiSchema> GetProperties(this IOpenApiSch
.Where(a => a.Type == JsonSchemaType.Object)
.SelectMany(a => a.Properties ?? new Dictionary<string, IOpenApiSchema>())
)
.DistinctBy(a => a.Key)
.ToDictionary(a => a.Key, a => a.Value)
?? [];
}
Expand Down