using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using VberAdmin.Models;
using VberAdmin.Templates.V4;
namespace VberAdmin.Generating;
public class FileCreateV4 : FileCreateBase, IFileCreate
{
public async Task CreateAsync(TemplateViewModel viewModel)
{
await CreateDtoAsync(viewModel);
await CreateApplicationAsync(viewModel);
await CreateWebAsync(viewModel);
}
///
/// 生成DTO
///
private async Task CreateDtoAsync(TemplateViewModel viewModel)
{
List dtoFiles = new List();
if (viewModel.IsCreateDto)
{
if (await CreateT4Async(viewModel, viewModel.CreateDtoName))
dtoFiles.Add(viewModel.DtoFolder + viewModel.CreateDtoName);
}
if (viewModel.IsUpdateDto)
{
if (await CreateT4Async(viewModel, viewModel.UpdateDtoName))
dtoFiles.Add(viewModel.DtoFolder + viewModel.UpdateDtoName);
}
if (viewModel.IsUpdateDto)
{
if (await CreateT4Async(viewModel, viewModel.ListDtoName))
dtoFiles.Add(viewModel.DtoFolder + viewModel.ListDtoName);
}
if (dtoFiles.Any())
await AddFilesToProjectAsync(viewModel.ApplicationName, dtoFiles);
}
///
/// 生成Application
///
private async Task CreateApplicationAsync(TemplateViewModel viewModel)
{
List applicationFileList = new List();
if (viewModel.IsApplicationService)
{
if (await CreateT4Async(viewModel, viewModel.ServiceName, 1))
applicationFileList.Add(viewModel.ServiceFolder + viewModel.ServiceName);
}
if (viewModel.IsIApplicationService)
{
if (await CreateT4Async(viewModel, viewModel.ServiceInterfaceName, 1))
applicationFileList.Add(viewModel.ServiceFolder + viewModel.ServiceInterfaceName);
}
if (applicationFileList.Any())
await AddFilesToProjectAsync(viewModel.ApplicationName, applicationFileList);
}
///
/// 生成Web
///
private async Task CreateWebAsync(TemplateViewModel viewModel)
{
List webFileList = new List();
if (viewModel.IsController)
{
if (await CreateT4Async(viewModel, viewModel.ControllerName, 2))
webFileList.Add(viewModel.ControllerFolder + viewModel.ControllerName);
}
if (viewModel.IsView)
{
if (await CreateT4Async(viewModel, viewModel.ViewsName, 3))
webFileList.Add(viewModel.ViewsFolder + viewModel.ViewsName);
}
if (webFileList.Any())
await AddFilesToProjectAsync(viewModel.WebName, webFileList);
}
}