Skip to content

Commit

Permalink
Separando criação de diretório com id porque caminho.join aparentem…
Browse files Browse the repository at this point in the history
…ente se comporta de maneira estranha com `[id]`.
  • Loading branch information
leonelsanchesdasilva committed Jan 22, 2024
1 parent b5f1856 commit 80b0998
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 9 deletions.
69 changes: 60 additions & 9 deletions interface-linha-comando/gerar/gerador-rotas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import * as caminho from 'path';

import { Classe } from '@designliquido/delegua/fontes/declaracoes';
import { pluralizar } from '@designliquido/flexoes';
import { criarDiretorioSeNaoExiste } from '.';
import { criarDiretorioComIdSeNaoExiste, criarDiretorioSeNaoExiste } from '.';

export class GeradorRotas {
indentacao: number;
Expand Down Expand Up @@ -31,9 +31,9 @@ export class GeradorRotas {

criarDiretorioSeNaoExiste('rotas', nomeModeloPlural);

const rotasCriadas = [];
let rotasCriadas = [];
rotasCriadas.push(this.criarNovasRotasSemId(declaracaoModelo, diretorioRotas));
rotasCriadas.push(this.criarNovasRotasComId(declaracaoModelo, diretorioRotas));
rotasCriadas = rotasCriadas.concat(this.criarNovasRotasComId(declaracaoModelo, diretorioRotas));
return rotasCriadas;
}

Expand Down Expand Up @@ -63,18 +63,35 @@ export class GeradorRotas {
* @param {string} diretorioRotas O diretório onde o arquivo de rotas deve ser salvo.
* @returns O caminho do arquivo de rotas no sistema de arquivos.
*/
private criarNovasRotasComId(declaracaoModelo: Classe, diretorioRotas: string): string {
private criarNovasRotasComId(declaracaoModelo: Classe, diretorioRotas: string): string[] {
const conteudoSelecionarUm = this.criarRotaSelecionarUm(declaracaoModelo);
const conteudoSelecionarParaEdicao = this.criarRotaEditar(declaracaoModelo);
const conteudoAtualizar = `liquido.rotaPut(funcao(requisicao, resposta) {\n resposta.lmht({ "titulo": "Liquido" })\n})\n\n`;
const conteudoSelecionarParaExclusao = this.criarRotaConfirmarExclusao(declaracaoModelo);
const conteudoExcluir = `liquido.rotaDelete(funcao(requisicao, resposta) {\n resposta.lmht({ "titulo": "Liquido" })\n})\n\n`;
const conteudoRotas = `${conteudoSelecionarUm}${conteudoAtualizar}${conteudoExcluir}`;
const conteudoRotas = `${conteudoSelecionarUm}${conteudoSelecionarParaEdicao}${conteudoAtualizar}${conteudoSelecionarParaExclusao}${conteudoExcluir}`;

const caminhoRotas = caminho.join(diretorioRotas, '[id].delegua');
const diretorioRotasComId = criarDiretorioComIdSeNaoExiste(diretorioRotas);

const caminhoRotasId = caminho.join(diretorioRotasComId, 'inicial.delegua');
sistemaArquivos.writeFileSync(
caminhoRotas,
caminhoRotasId,
conteudoRotas
);
return caminhoRotas;

const caminhoRotaEditar = caminho.join(diretorioRotasComId, 'editar.delegua');
sistemaArquivos.writeFileSync(
caminhoRotaEditar,
conteudoRotas
);

const caminhoRotaExcluir = caminho.join(diretorioRotasComId, 'excluir.delegua');
sistemaArquivos.writeFileSync(
caminhoRotaExcluir,
conteudoRotas
);

return [caminhoRotasId, caminhoRotaEditar, caminhoRotaExcluir];
}

private criarRotaSelecionarTudo(declaracaoModelo: Classe) {
Expand All @@ -96,7 +113,7 @@ export class GeradorRotas {
`})\n\n`;
}

private criarRotaSelecionarUm(declaracaoModelo: Classe) {
private criarRotaSelecionarUm(declaracaoModelo: Classe): string {
// Isso aqui não vai ficar assim.
// É preciso montar as partes de dados antes.
const dadosTestes = [];
Expand All @@ -112,4 +129,38 @@ export class GeradorRotas {
`${" ".repeat(this.indentacao)}})\n` +
`})\n\n`;
}

private criarRotaEditar(declaracaoModelo: Classe): string {
// Isso aqui não vai ficar assim.
// É preciso montar as partes de dados antes.
const dadosTestes = [];
for (const propriedade of declaracaoModelo.propriedades) {
dadosTestes.push(`"${propriedade.nome.lexema}": "Teste"`);
}

return `liquido.rotaGet(funcao(requisicao, resposta) {\n` +
`${" ".repeat(this.indentacao)}resposta.lmht("editar", {\n` +
`${" ".repeat(this.indentacao * 2)}${dadosTestes.reduce(
(acumulador, elemento) => acumulador + ', ' + elemento
)}\n` +
`${" ".repeat(this.indentacao)}})\n` +
`})\n\n`;
}

private criarRotaConfirmarExclusao(declaracaoModelo: Classe): string {
// Isso aqui não vai ficar assim.
// É preciso montar as partes de dados antes.
const dadosTestes = [];
for (const propriedade of declaracaoModelo.propriedades) {
dadosTestes.push(`"${propriedade.nome.lexema}": "Teste"`);
}

return `liquido.rotaGet(funcao(requisicao, resposta) {\n` +
`${" ".repeat(this.indentacao)}resposta.lmht("confirmar-exclusao", {\n` +
`${" ".repeat(this.indentacao * 2)}${dadosTestes.reduce(
(acumulador, elemento) => acumulador + ', ' + elemento
)}\n` +
`${" ".repeat(this.indentacao)}})\n` +
`})\n\n`;
}
}
15 changes: 15 additions & 0 deletions interface-linha-comando/gerar/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,18 @@ export function criarDiretorioSeNaoExiste(...partesDiretorio: string[]) {
sistemaArquivos.mkdirSync(caminhoDiretorio);
}
}

/**
* Cria na raiz do projeto um diretório passado por parâmetro, se já não existir, com `[id]` no final.
* Precisa ser separado porque o `caminho.join` aparentemente estraga o nome do diretório.
* @param {string} diretorioRotas O prefixo do diretório a ser verificado/criado.
*/
export function criarDiretorioComIdSeNaoExiste(diretorioRotas: string): string {
const caminhoDiretorio = diretorioRotas + `\\[id]`;

if (!sistemaArquivos.existsSync(caminhoDiretorio)) {
sistemaArquivos.mkdirSync(caminhoDiretorio);
}

return caminhoDiretorio;
}

0 comments on commit 80b0998

Please sign in to comment.