Este é o repositório do backend do projeto dTool, desenvolvido pelos alunos da Agência Experimental de Engenharia de Software da PUCRS durante o semestre 2020/1.
TL;DR:
- instalar NodeJS v13
- (apenas no Windows)
npm i -g win-node-env - instalar PostgreSQL 12
psql -q -c "CREATE ROLE dtool WITH LOGIN PASSWORD 'dtoolages2020';" -c 'ALTER ROLE dtool CREATEDB;'psql -q -d postgres -U dtool -c 'CREATE DATABASE dtool'- (opcional) instalar pgAdmin 4 - interface visual de administração para o banco da dados PostgreSQL
git clone http://tools.ages.pucrs.br/dtool/backend.gitcd backendgit update-index --skip-worktree .envnpm i- definir as variáveis para acesso ao banco de dados no arquivo
config/postgresql-dev.js npm run dev
1 - NodeJS
Acesse a página de downloads do NodeJS e baixe a versão 13.2 compatível com o seu sistema operacional. Também é possível instalar usando um gerenciador de pacotes compatível com seu SO.
Certifique-se de que a versão instalada é a 13 executando o seguinte comando no terminal:
~/ $ node -v
v13.2.0Se você usa Windows, instale o pacote win-node-env:
~/ $ npm install -g win-node-envSe você usa Windows, é necessário setar a variável de ambiente com o endereço do PostgreSQL no seu computador. Pode seguir este tutorial, mas lembre-se que estamos usando outra versão ao invés da 11 (confira a versão em C:\Program Files\PostgreSQL).
2 - PostgreSQL
O backend utiliza o PostgreSQL como sistema de gerenciamento de banco de dados. Siga as instruções específicas do seu sistema operacional e instale a versão 12.
Verifique se a instalação foi finalizada com sucesso:
~/ $ psql --version
psql (PostgreSQL) 12.1Precisamos criar um usuário para a aplicação usar para criar tabelas no SGBD, além de criar o database a ser usado pela aplicação:
~/ $ psql
seu_usuario=# CREATE ROLE dtool WITH LOGIN PASSWORD 'dtoolages2020';
seu_usuario=# ALTER ROLE dtool CREATEDB;
seu_usuario=# \q
~/ $ psql -d postgres -U dtool
seu_usuario=> CREATE DATABASE dtool;
seu_usuario=> \q
3 - pgAdmin (opcional)
Para usar uma interface gráfica para manipular o database usado pela aplicação, instale o pgAdmin 4 (de acordo com seu sistema operacional).
Para conectar-se ao servidor local pela interface do pgAdmin:
- na tela inicial do pgAdmin, vá até o menu e selecione Object > Create > Server...
- na aba General, preencha o campo Name com
dtool-local(usado apenas para identificar o servidor do banco, você pode escolher outro nome, se preferir) - na aba Connection, preencha os campos como indicado abaixo:
- Host name/address:
localhost - Maintenance databse:
dtool - Username:
dtool - Password:
dtoolages2020
- Host name/address:
- ainda na aba Connection, marque o campo Save password?
- clique em
Save
Se o processo ocorrer conform esperado, o menu lateral deve estar parecido com o seguinte:
Escolha um local no sistema de arquivos de sua máquina onde o projeto será armazenado. Navegue até a pasta selecionada com o terminal e clone o projeto usando o Git.
~/ $ # considerando que o projeto ficará na pasta ~/dtool
~/ $ cd dtool
~/dtool/ $ git clone http://tools.ages.pucrs.br/dtool/backend.gitDepois do clone, vá até a pasta com o projeto e execute um comando do Git para ignorar mudanças locais no arquivo de configurações de ambiente:
~/dtool/ $ cd backend
~/dtool/backend/ $ git update-index --skip-worktree .envNavegue até a pasta do projeto com o terminal e use o NPM (já vem instalado com o NodeJS) para instalar as dependências do projeto.
~/dtool $ cd backend
~/dtool/backend $ npm install # esse comando pode demorar alguns segundos para completarSe você utilizou os mesmos parâmetros que foram usados nos comandos acima para configurar o PostgreSQL, pule esta etapa.
A aplicação NodeJS utiliza o valor na variável DB_URL, no arquivo .env, para conectar-se ao banco de dados. Altere o valor da variável usando o usuário, senha e database criados anteriormente (o formato da URL está no arquivo .env).
Por fim, para verificar se o ambiente está corretamente configurado, execute o servidor em modo de desenvolvimento:
~/dtool/backend $ npm run dev
... # algumas linhas vão aparecer aqui, é normal
Listening on port 4000 # se aparecer isso, então a configuração do ambiente deu certo :DPara o trabalho do dia-a-dia, você usará basicamente três comandos:
- ao iniciar o desenvolvimento, executar o servidor em ambiente de desenvolvimento:
~/dtool/backend $ npm run dev- para executar os testes automatizados:
~/dtool/backend $ npm test- para executar os testes automatizados coletando dados de code coverage:
~/dtool/backend $ npm run coverageNota: o relatório de coverage é salvo na pasta coverage, na raiz do projeto, e pode ser facilmente visualizado abrindo o arquivo coverage/lcov-report/index.hmtl em um navegador.
Foram criados alguns scripts que podem ser executados com o NPM. Todos os scrips podem ser executados com npm run <nome-do-script>.
Os principais scripts:
dev: executar o servidor em modo desenvolvimento (com hot reload; veja mais sobre nodemon);lint: executar o linter sobre todos os arquivos do projeto;test: executar os testes;docs: atualizar a documentação dos endpoints (a partir do Postman);coverage: executar os testes coletando dados de code coverage;format: formatar todo o código do projeto;clean: limpar todos os arquivos que podem ser gerados novamente (como código transpilado);start: executar o servidor em modo produção.
Scripts secundários, usados pelos scripts principais:
_prod: executar o servidor em modo produção;_dev: executar o servidor em modo desenvolvimento, sem hot reload (atualizações nos arquivos requerem que o servidor seja reiniciado);start-server: executar o servidor, considerando que o código JS foi transpilado com Babel;transpile: transpilar código JS usando ES6+ para ES5 usando Babel;format:staged: formatar apenas o código que está "staged" pelo Git, usado como hook de pré-commit;pretest: executar o linter antes de rodar os testes.
Foram criados hooks do Git usando Husky para a execução de tarefas de forma automatizada:
pre-commit: antes de todo commit, faz a formatação dos arquivos incluidos no commit (staged);pre-push: antes de todo push, executa o linter sobre todos os arquivos do projeto (o linter está configurado apenas para exibir warnings, sem erros, então o push não falhará se houverem mudanças de linter a serem realizadas).
Para saber mais informações sobre o projeto:
