Files
Yi.Framework/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/NewCommand.cs
2024-11-08 12:35:54 +08:00

139 lines
4.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.CommandLineUtils;
using Yi.Abp.Tool.Application.Contracts;
using Yi.Abp.Tool.Application.Contracts.Dtos;
namespace Yi.Abp.Tool.Commands
{
public class NewCommand : ICommand
{
private readonly ITemplateGenService _templateGenService;
public NewCommand(ITemplateGenService templateGenService)
{
_templateGenService = templateGenService;
}
public string Command => "new";
public string? Description => "创建项目模板` yi-abp new <name> -csf `";
public void CommandLineApplication(CommandLineApplication application)
{
application.HelpOption("-h|--help");
var templateTypeOption = application.Option("-t|--template", "模板类型:`module`|`porject`",
CommandOptionType.SingleValue);
var pathOption = application.Option("-p|--path", "创建路径", CommandOptionType.SingleValue);
var csfOption = application.Option("-csf", "是否创建解决方案文件夹", CommandOptionType.NoValue);
var soureOption = application.Option("-s|--soure", "模板来源gitee模板库分支名称: 默认值`default`",
CommandOptionType.SingleValue);
var moduleNameArgument = application.Argument("moduleName", "模块名", (_) => { });
//子命令new list
application.Command("list",(applicationlist) =>
{
applicationlist.OnExecute(() =>
{
Console.WriteLine("正在远程搜索中...");
var list=_templateGenService.GetAllTemplatesAsync().Result;
var tip = $"""
全部模板包括:
模板名称
----------------
{list.JoinAsString("\n")}
""";
Console.WriteLine(tip);
return 0;
});
});
application.OnExecute(() =>
{
var path = string.Empty;
if (pathOption.HasValue())
{
path = pathOption.Value();
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
return 0;
}
}
#region
var id = Guid.NewGuid().ToString("N");
var zipPath = string.Empty;
byte[] fileByteArray;
var soure= soureOption.HasValue() ? soureOption.Value() : "default";
var templateType = templateTypeOption.HasValue() ? templateTypeOption.Value() : "module";
if (templateType == "module")
{
//代表模块生成
fileByteArray = (_templateGenService.CreateModuleAsync(new TemplateGenCreateInputDto
{
Name = moduleNameArgument.Value,
ModuleSoure = soure
}).Result);
}
else
{
//还是代表模块生成
fileByteArray = _templateGenService.CreateModuleAsync(new TemplateGenCreateInputDto
{
Name = moduleNameArgument.Value,
}).Result;
}
zipPath = Path.Combine(path, $"{id}.zip");
File.WriteAllBytes(zipPath, fileByteArray);
#endregion
#region
//默认是当前目录
var unzipDirPath = "./";
//如果创建解决方案文件夹
if (csfOption.HasValue())
{
var moduleName = moduleNameArgument.Value.ToLower().Replace(".", "-");
unzipDirPath = Path.Combine(path, moduleName);
if (Directory.Exists(unzipDirPath))
{
throw new UserFriendlyException($"文件夹[{unzipDirPath}]已存在,请删除后重试");
}
Directory.CreateDirectory(unzipDirPath);
}
#endregion
ZipFile.ExtractToDirectory(zipPath, unzipDirPath);
//创建压缩包后删除临时目录
File.Delete(zipPath);
Console.WriteLine("恭喜~模块已生成!");
return 0;
});
}
}
}