Skip to content

Commit

Permalink
Adicionando geração de classes.
Browse files Browse the repository at this point in the history
  • Loading branch information
rodrigoborgesmachado committed Jan 16, 2025
1 parent ce328c3 commit 54e6f83
Show file tree
Hide file tree
Showing 17 changed files with 1,734 additions and 88 deletions.
16 changes: 16 additions & 0 deletions CrudForms/CrudForms.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,13 @@
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Regras\AcessoBancoCliente\AcessoBanco.cs" />
<Compile Include="Regras\ApiClasses\ControllerCreator.cs" />
<Compile Include="Regras\ApiClasses\CreatorApiClasses.cs" />
<Compile Include="Regras\ApiClasses\EntidadesCreator.cs" />
<Compile Include="Regras\ApiClasses\NamesHandler.cs" />
<Compile Include="Regras\ApiClasses\ProfilesCreator.cs" />
<Compile Include="Regras\ApiClasses\ServiceCreator.cs" />
<Compile Include="Regras\ApiClasses\RepositoryCreator.cs" />
<Compile Include="Regras\BuscaNovaVersaoSistema.cs" />
<Compile Include="Regras\EnviarEmail.cs" />
<Compile Include="Regras\GerarArquivoExportacao.cs" />
Expand Down Expand Up @@ -273,6 +280,12 @@
<Compile Include="Visao\FO_SelecionaConexao.Designer.cs">
<DependentUpon>FO_SelecionaConexao.cs</DependentUpon>
</Compile>
<Compile Include="Visao\FO_SelecioneTabelasClasses.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Visao\FO_SelecioneTabelasClasses.Designer.cs">
<DependentUpon>FO_SelecioneTabelasClasses.cs</DependentUpon>
</Compile>
<Compile Include="Visao\FO_SelecioneTabelasDer.cs">
<SubType>Form</SubType>
</Compile>
Expand Down Expand Up @@ -353,6 +366,9 @@
<EmbeddedResource Include="Visao\FO_SelecionaConexao.resx">
<DependentUpon>FO_SelecionaConexao.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Visao\FO_SelecioneTabelasClasses.resx">
<DependentUpon>FO_SelecioneTabelasClasses.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Visao\FO_SelecioneTabelasDer.resx">
<DependentUpon>FO_SelecioneTabelasDer.cs</DependentUpon>
</EmbeddedResource>
Expand Down
211 changes: 211 additions & 0 deletions CrudForms/Regras/ApiClasses/ControllerCreator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
using DAO;
using System.Text;
using System;
using System.IO;

namespace Regras.ApiClasses
{
public static class ControllerCreator
{
public static bool CreateController(MD_Tabela tabela, string nomeProjeto)
{
bool result = true;

result &= Cria(tabela, nomeProjeto);

return result;
}

private static bool Cria(MD_Tabela tabela, string nomeProjeto)
{
bool result = true;

try
{
NamesHandler.ClasseType type = NamesHandler.ClasseType.Controller;
string classeName = NamesHandler.CriaNomeClasse(type, tabela.Nome);
string caminhoFile = NamesHandler.GetDirectoryByType(type) + NamesHandler.CriaNomeArquivoClasse(type, tabela.Nome);
Util.CL_Files.DeleteFilesIfExists(caminhoFile);

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine($"using {nomeProjeto}.Presentation.Api.Handler;");
stringBuilder.AppendLine($"using {nomeProjeto}.Application.Helpers;");
stringBuilder.AppendLine($"using {nomeProjeto}.Domain.ModelClasses;");
stringBuilder.AppendLine($"using {nomeProjeto}.Presentation.Model.Returns;");
stringBuilder.AppendLine($"using Microsoft.AspNetCore.Authorization;");
stringBuilder.AppendLine($"using Microsoft.AspNetCore.Mvc;");
stringBuilder.AppendLine($"using Microsoft.Extensions.Options;");
stringBuilder.AppendLine($"using IMainAppService = {nomeProjeto}.Application.Interfaces.{NamesHandler.CriaNomeClasse(NamesHandler.ClasseType.InterfaceService, tabela.Nome)};");
stringBuilder.AppendLine($"using MainDTO = {nomeProjeto}.Application.DTO.{NamesHandler.CriaNomeClasse(NamesHandler.ClasseType.Dto, tabela.Nome)};");
stringBuilder.AppendLine($"using MainViewModel = {nomeProjeto}.Presentation.Model.ViewModels.{NamesHandler.CriaNomeClasse(NamesHandler.ClasseType.ViewModel, tabela.Nome)};");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($"namespace {nomeProjeto}.Presentation.Api.Controllers");
stringBuilder.AppendLine($"{{");
stringBuilder.AppendLine($" /// <summary>");
stringBuilder.AppendLine($" /// Controller Class");
stringBuilder.AppendLine($" /// </summary>");
stringBuilder.AppendLine($" [ApiController]");
stringBuilder.AppendLine($" [Authorize]");
stringBuilder.AppendLine($" [Route(\"{tabela.Nome}\")]");
stringBuilder.AppendLine($" public class {classeName} : ControllerBase, IDisposable");
stringBuilder.AppendLine($" {{");
stringBuilder.AppendLine($" private readonly IMainAppService _mainAppService;");
stringBuilder.AppendLine($" private readonly Settings _settings;");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" private readonly TokenHandler tokenController;");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" /// <summary>");
stringBuilder.AppendLine($" /// Class constructor");
stringBuilder.AppendLine($" /// </summary>");
stringBuilder.AppendLine($" public {classeName}(IMainAppService mainAppService, IOptions<Settings> options, IHttpContextAccessor httpContextAccessor)");
stringBuilder.AppendLine($" {{");
stringBuilder.AppendLine($" _mainAppService = mainAppService;");
stringBuilder.AppendLine($" _settings = options.Value;");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" tokenController = new TokenHandler(httpContextAccessor);");
stringBuilder.AppendLine($" }}");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" /// <summary>");
stringBuilder.AppendLine($" /// Get all");
stringBuilder.AppendLine($" /// </summary>");
stringBuilder.AppendLine($" /// <param name=\"include\"></param>");
stringBuilder.AppendLine($" /// <returns><![CDATA[Task<IEnumerable<MainViewModel>>]]></returns>");
stringBuilder.AppendLine($" [HttpGet]");
stringBuilder.AppendLine($" public async Task<IActionResult> Get(string? include = null)");
stringBuilder.AppendLine($" {{");
stringBuilder.AppendLine($" var mainDto = await _mainAppService.GetAllAsync(include);");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" return Ok(mainDto.ProjectedAsCollection<MainViewModel>());");
stringBuilder.AppendLine($" }}");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" /// <summary>");
stringBuilder.AppendLine($" /// Get by code");
stringBuilder.AppendLine($" /// </summary>");
stringBuilder.AppendLine($" /// <param name=\"code\"></param>");
stringBuilder.AppendLine($" /// <param name=\"include\"></param>");
stringBuilder.AppendLine($" /// <returns><![CDATA[Task<MainViewModel>]]></returns>");
stringBuilder.AppendLine($" [HttpGet(\"{{code}}\")]");
stringBuilder.AppendLine($" public async Task<IActionResult> Get(string code, string? include = null)");
stringBuilder.AppendLine($" {{");
stringBuilder.AppendLine($" var mainDto = await _mainAppService.GetAsync(code, include);");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" return Ok(mainDto.ProjectedAs<MainViewModel>());");
stringBuilder.AppendLine($" }}");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" /// <summary>");
stringBuilder.AppendLine($" /// List paged");
stringBuilder.AppendLine($" /// </summary>");
stringBuilder.AppendLine($" /// <param name=\"page\"></param>");
stringBuilder.AppendLine($" /// <param name=\"quantity\"></param>");
stringBuilder.AppendLine($" /// <param name=\"isActive\"></param>");
stringBuilder.AppendLine($" /// <param name=\"term\"></param>");
stringBuilder.AppendLine($" /// <param name=\"orderBy\"></param>");
stringBuilder.AppendLine($" /// <param name=\"include\"></param>");
stringBuilder.AppendLine($" /// <returns><![CDATA[Task<PaggedBaseReturn<MainViewModel>>]]></returns>");
stringBuilder.AppendLine($" [HttpGet(\"pagged\")]");
stringBuilder.AppendLine($" public async Task<IActionResult> GetPagged(int page, int quantity, string isActive = null, string term = null, string orderBy = null, string? include = null)");
stringBuilder.AppendLine($" {{");
stringBuilder.AppendLine($" var result = await _mainAppService.GetAllPagedAsync(page, quantity, isActive, term, orderBy: orderBy, include: include);");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" var list = result.Item3.ProjectedAsCollection<MainViewModel>();");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" return Ok(");
stringBuilder.AppendLine($" new PaggedBaseReturn<MainViewModel>");
stringBuilder.AppendLine($" {{");
stringBuilder.AppendLine($" Page = page,");
stringBuilder.AppendLine($" Quantity = quantity,");
stringBuilder.AppendLine($" TotalCount = result.Item1,");
stringBuilder.AppendLine($" TotalPages = result.Item2,");
stringBuilder.AppendLine($" Results = list");
stringBuilder.AppendLine($" }}");
stringBuilder.AppendLine($" );");
stringBuilder.AppendLine($" }}");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" /// <summary>");
stringBuilder.AppendLine($" /// List paged");
stringBuilder.AppendLine($" /// </summary>");
stringBuilder.AppendLine($" /// <param name=\"quantityMax\"></param>");
stringBuilder.AppendLine($" /// <param name=\"isActive\"></param>");
stringBuilder.AppendLine($" /// <param name=\"term\"></param>");
stringBuilder.AppendLine($" /// <param name=\"orderBy\"></param>");
stringBuilder.AppendLine($" /// <param name=\"include\"></param>");
stringBuilder.AppendLine($" /// <returns><![CDATA[Task<PaggedBaseReturn<MainViewModel>>]]></returns>");
stringBuilder.AppendLine($" [HttpGet(\"export\")]");
stringBuilder.AppendLine($" public async Task<IActionResult> Export(int quantityMax, string isActive = null, string term = null, string orderBy = null, string? include = null)");
stringBuilder.AppendLine($" {{");
stringBuilder.AppendLine($" var result = await _mainAppService.GetReport(quantityMax, isActive, term, orderBy: orderBy, include: include);");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" return Ok(new BaseReturn<string>");
stringBuilder.AppendLine($" {{");
stringBuilder.AppendLine($" Message = \"Report created\",");
stringBuilder.AppendLine($" Status = 200,");
stringBuilder.AppendLine($" Object = result");
stringBuilder.AppendLine($" }});");
stringBuilder.AppendLine($" }}");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" /// <summary>");
stringBuilder.AppendLine($" /// Insert new");
stringBuilder.AppendLine($" /// </summary>");
stringBuilder.AppendLine($" /// <param name=\"model\"></param>");
stringBuilder.AppendLine($" /// <returns><![CDATA[Task<IActionResult>]]></returns>");
stringBuilder.AppendLine($" [HttpPost]");
stringBuilder.AppendLine($" public async Task<IActionResult> Post([FromBody] MainViewModel model)");
stringBuilder.AppendLine($" {{");
stringBuilder.AppendLine($" var mainDto = model.ProjectedAs<MainDTO>();");
stringBuilder.AppendLine($" var result = await _mainAppService.InsertAsync(mainDto);");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" return Ok(result);");
stringBuilder.AppendLine($" }}");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" /// <summary>");
stringBuilder.AppendLine($" /// Update");
stringBuilder.AppendLine($" /// </summary>");
stringBuilder.AppendLine($" /// <param name=\"model\"></param>");
stringBuilder.AppendLine($" /// <returns><![CDATA[Task<IActionResult>]]></returns>");
stringBuilder.AppendLine($" [HttpPut]");
stringBuilder.AppendLine($" public async Task<IActionResult> Put([FromBody] MainViewModel model)");
stringBuilder.AppendLine($" {{");
stringBuilder.AppendLine($" var mainDto = model.ProjectedAs<MainDTO>();");
stringBuilder.AppendLine($" var result = await _mainAppService.UpdateAsync(mainDto);");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" return Ok(result);");
stringBuilder.AppendLine($" }}");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" /// <summary>");
stringBuilder.AppendLine($" /// Remove");
stringBuilder.AppendLine($" /// </summary>");
stringBuilder.AppendLine($" /// <param name=\"model\"></param>");
stringBuilder.AppendLine($" /// <returns><![CDATA[Task<IActionResult>]]></returns>");
stringBuilder.AppendLine($" [HttpDelete]");
stringBuilder.AppendLine($" public async Task<IActionResult> Delete([FromBody] MainViewModel model)");
stringBuilder.AppendLine($" {{");
stringBuilder.AppendLine($" var mainDto = model.ProjectedAs<MainDTO>();");
stringBuilder.AppendLine($" var result = await _mainAppService.RemoveAsync(mainDto);");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" return Ok(result);");
stringBuilder.AppendLine($" }}");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($" /// <summary>");
stringBuilder.AppendLine($" /// Dispose");
stringBuilder.AppendLine($" /// </summary>");
stringBuilder.AppendLine($" /// <param name=\"disposing\"></param>");
stringBuilder.AppendLine($" /// <returns><![CDATA[]]></returns>");
stringBuilder.AppendLine($" public void Dispose()");
stringBuilder.AppendLine($" {{");
stringBuilder.AppendLine($" _mainAppService.Dispose();");
stringBuilder.AppendLine($" }}");
stringBuilder.AppendLine($" }}");
stringBuilder.AppendLine($"}}");

File.WriteAllText(caminhoFile, stringBuilder.ToString());
}
catch (Exception ex)
{
Util.CL_Files.LogException(ex);
result = false;
}

return result;
}
}
}
48 changes: 48 additions & 0 deletions CrudForms/Regras/ApiClasses/CreatorApiClasses.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
using Model;
using System;
using System.Collections.Generic;

namespace Regras.ApiClasses
{
public static class CreatorApiClasses
{
public static bool CreateApiClasses(List<MD_Tabela> tabelas, string projetoNome, out string message)
{
bool result = true;
message = string.Empty;
Visao.BarraDeCarregamento barra = new Visao.BarraDeCarregamento(tabelas.Count, "Criando classes");
barra.Show();

try
{

foreach(var tabela in tabelas)
{
result &= EntidadesCreator.CreateEntidades(tabela.DAO, projetoNome);

result &= RepositoryCreator.CreateRepository(tabela.DAO, projetoNome);

result &= ProfilesCreator.CreateProfiles(tabela.DAO, projetoNome);

result &= ServiceCreator.CreateService(tabela.DAO, projetoNome);

result &= ControllerCreator.CreateController(tabela.DAO, projetoNome);
barra.AvancaBarra(1);
}

}
catch (Exception ex)
{
result = false;
Util.CL_Files.LogException(ex);
message = ex.Message;
}
finally
{
barra.Dispose();
}

return result;
}
}
}
Loading

0 comments on commit 54e6f83

Please sign in to comment.