cartorio-plataforma-cli
Version:
CLI para gerenciar a Plataforma do Cartório de Criciúma com sistema de módulos
184 lines (167 loc) • 9.31 kB
JavaScript
const chalk = require('chalk');
const boxen = require('boxen');
module.exports = function help() {
// Banner personalizado para a CLI
const banner = chalk.bold.cyan(`
██████╗ ██╗ █████╗ ████████╗ █████╗ ███████╗ ██████╗ ██████╗ ███╗ ███╗ █████╗
██╔══██╗██║ ██╔══██╗╚══██╔══╝██╔══██╗██╔════╝██╔═══██╗██╔══██╗████╗ ████║██╔══██╗
██████╔╝██║ ███████║ ██║ ███████║█████╗ ██║ ██║██████╔╝██╔████╔██║███████║
██╔═══╝ ██║ ██╔══██║ ██║ ██╔══██║██╔══╝ ██║ ██║██╔══██╗██║╚██╔╝██║██╔══██║
██║ ███████╗██║ ██║ ██║ ██║ ██║██║ ╚██████╔╝██║ ██║██║ ╚═╝ ██║██║ ██║
╚═╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝
██████╗ █████╗ ██████╗ ████████╗ ██████╗ ██████╗ ██╗ ██████╗
██╔════╝██╔══██╗██╔══██╗╚══██╔══╝██╔═══██╗██╔══██╗██║██╔═══██╗
██║ ███████║██████╔╝ ██║ ██║ ██║██████╔╝██║██║ ██║
██║ ██╔══██║██╔══██╗ ██║ ██║ ██║██╔══██╗██║██║ ██║
╚██████╗██║ ██║██║ ██║ ██║ ╚██████╔╝██║ ██║██║╚██████╔╝
╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═════╝
`);
// Descrição da CLI
const description = chalk.white(
'CLI para gerenciar a Plataforma do Cartório de Criciúma. Permite o controle centralizado de todos os componentes da plataforma, incluindo serviços de infraestrutura, core e módulos.'
);
// Comandos disponíveis
const commandsTitle = chalk.bold.underline.white('\n📋 COMANDOS DISPONÍVEIS:');
const commands = [
{
command: 'start',
description: 'Inicia os componentes da plataforma',
options: [
{ option: '-a, --all', description: 'Inicia todos os componentes (Infra + Core + Módulos)' },
{ option: '-i, --infra', description: 'Inicia apenas serviços de infraestrutura (Consul, PostgreSQL, Traefik)' },
{ option: '-c, --core', description: 'Inicia infraestrutura e componentes core (Root Config, Plataforma Frontend, Plataforma Backend)' },
{ option: '-f, --full', description: 'Inicia infraestrutura, core e módulos' },
{ option: '-u, --custom', description: 'Modo personalizado - permite selecionar módulos específicos' },
{ option: '-m, --modules <lista>', description: 'Lista de módulos para iniciar no formato id:tipo (ex: senhas:frontend,senhas:backend)' },
{ option: '-e, --env <ambiente>', description: 'Especifica o ambiente (dev, local, prod). Padrão: local' },
{ option: '-I, --interactive', description: 'Modo interativo com assistente para seleção de componentes e ambiente' },
{ option: '-b, --build', description: 'Constrói as imagens com Docker Buildx Bake antes de iniciar (padrão)' },
{ option: '-n, --no-build', description: 'Não constrói as imagens, usa as existentes' }
]
},
{
command: 'stop',
description: 'Para componentes da plataforma',
options: [
{ option: '-e, --env <ambiente>', description: 'Especifica o ambiente (dev, local, prod). Padrão: local' },
{ option: '-i, --interactive', description: 'Modo interativo com assistente para seleção de componentes e ambiente' }
]
},
{
command: 'status',
description: 'Exibe o status atual dos componentes da plataforma',
options: [
{ option: '-e, --env <ambiente>', description: 'Especifica o ambiente (dev, local, prod). Padrão: local' },
{ option: '-i, --interactive', description: 'Modo interativo com assistente para verificação detalhada de status' }
]
},
{
command: 'logs',
description: 'Exibe logs dos componentes da plataforma',
options: [
{ option: '-s, --service <serviço>', description: 'Exibe logs apenas do serviço especificado' },
{ option: '-e, --env <ambiente>', description: 'Especifica o ambiente (dev, local, prod). Padrão: local' },
{ option: '-f, --follow', description: 'Segue os logs em tempo real' },
{ option: '-i, --interactive', description: 'Modo interativo para seleção de serviços' }
]
}
];
// Exemplos de uso
const examplesTitle = chalk.bold.underline.white('\n🔍 EXEMPLOS DE USO:');
const examples = [
{
description: 'Iniciar todos os componentes no ambiente local',
command: 'plataforma start --all'
},
{
description: 'Iniciar em modo interativo para selecionar componentes',
command: 'plataforma start --interactive'
},
{
description: 'Iniciar apenas a infraestrutura em ambiente de desenvolvimento',
command: 'plataforma start --infra --env dev'
},
{
description: 'Iniciar infraestrutura e core em ambiente local',
command: 'plataforma start --core'
},
{
description: 'Iniciar infraestrutura, core e módulos em ambiente de produção',
command: 'plataforma start --full --env prod'
},
{
description: 'Iniciar módulos específicos',
command: 'plataforma start --custom --modules senhas:frontend,senhas:backend'
},
{
description: 'Iniciar serviços sem reconstruir as imagens',
command: 'plataforma start --all --no-build'
},
{
description: 'Verificar status de todos os componentes',
command: 'plataforma status'
},
{
description: 'Parar componentes de forma interativa',
command: 'plataforma stop --interactive'
},
{
description: 'Visualizar logs do serviço plataforma-backend',
command: 'plataforma logs --service plataforma-backend --follow'
}
];
// Ambientes disponíveis
const environmentsTitle = chalk.bold.underline.white('\n🌐 AMBIENTES DISPONÍVEIS:');
const environments = [
{
name: 'dev',
description: 'Ambiente de desenvolvimento (para equipe de desenvolvimento)'
},
{
name: 'local',
description: 'Ambiente local (padrão, para testes)'
},
{
name: 'prod',
description: 'Ambiente de produção'
}
];
// Dicas adicionais
const tipsTitle = chalk.bold.underline.white('\n💡 DICAS:');
const tips = [
'Use o modo interativo (--interactive) para uma experiência guiada e mais amigável',
'Para visualizar logs em tempo real, use a opção --follow',
'Verifique o status dos componentes antes de iniciar ou parar serviços',
'Utilize o ambiente correto para evitar conflitos de configuração',
'Use --no-build para iniciar rapidamente quando souber que as imagens já estão construídas'
];
// Formatação das seções
const formatCommands = commands.map(cmd => {
const cmdText = chalk.green(`plataforma ${cmd.command}`);
const descText = chalk.white(cmd.description);
const options = cmd.options.map(opt =>
` ${chalk.yellow(opt.option.padEnd(20))} ${chalk.dim(opt.description)}`
).join('\n');
return ` ${cmdText} - ${descText}\n${options}`;
}).join('\n\n');
const formatExamples = examples.map(ex =>
` ${chalk.dim(ex.description)}\n ${chalk.green(ex.command)}`
).join('\n\n');
const formatEnvironments = environments.map(env =>
` ${chalk.yellow(env.name.padEnd(10))} ${chalk.white(env.description)}`
).join('\n');
const formatTips = tips.map(tip =>
` ${chalk.cyan('•')} ${chalk.white(tip)}`
).join('\n');
// Montagem final da ajuda
const help = boxen(
`${banner}\n\n${description}\n${commandsTitle}\n\n${formatCommands}\n${examplesTitle}\n\n${formatExamples}\n${environmentsTitle}\n\n${formatEnvironments}\n${tipsTitle}\n\n${formatTips}`,
{
padding: 1,
margin: 1,
borderStyle: 'round',
borderColor: 'cyan'
}
);
console.log(help);
};