Este repositório contém a solução ao "Teste Prático de Desenvolvimento | Área: Programação Back-end" (edital 72/2023/JIPA), realizado no dia 19 de dezembro de 2023, no Instituto Federal de Rondônia, Campus Ji-Paraná.
Participante: Gabriel Rodrigues Antunes.
Apesar de fornecer o script sql em ./script.sql, o sistema utiliza a estratégia de migrations e seeds do próprio typeorm.
Nome do container | Porta interna | Descrição | Porta externa mapeada ao S.O. | Protocolo | Plataforma base |
---|---|---|---|---|---|
app-sistema-node |
3000 |
API HTTP REST. | http://localhost:3000 |
HTTP |
node:20 (baseado no debian); nestjs@10 ; |
app-sistema-db |
5432 |
Banco de dados postgres. | localhost:5432 |
postgres |
postgres:16-alpine (baseado no alpine); |
DOCUMENTAÇÃO DO SWAGGER DISPONÍVEL EM http://localhost:3000/api.
Para obter o código deste repositório, é necessário a utilização do sistema de versionamento de código Git.
Entre no caminho que deseja obter o código do projeto (como ~/Documentos/projetos
) e execute os seguintes comandos:
git clone https://github.com/guesant-challenges/desafio-2023-dez-19-gabriel.git;
cd desafio-2023-dez-19-gabriel;
Os comandos acima permitem clonar o repositório Git e entrar na pasta criada, respectivamente.
Neste projeto, é utilizado a plataforma de containers docker
, que assegura o mesmo ambiente de execução (sistema operacional, bibliotecas e ferramentas instaladas). Por isso, é imprescindível que o colaborador tenha o docker
e o docker compose
configurados no sistema operacional de desenvolvimento para uma melhor experiência de desenvolvimento, podendo utilizar como guia a documentação oficial disponibilizada online em: https://docs.docker.com/get-docker/.
Tendo em vista que o presente projeto necessita de utilizar o nodejs e o banco de dados postgres, o colaborador pode obter as imagens oficiais dos containers com o seguinte comando:
docker compose pull
O comando acima baixa as imagens preparadas com essas ferramentas para a integração ao ambiente de desenvolvimento do desafio.
Assim como em qualquer sistema, é necessário configurar os "segredos" ou as configurações de execução do projeto. Por o seguinte projeto possuir dois containers docker, foi escolhido serparar as configurações em dois arquivos: .env
e .db-postgres.env
. Cada um fornece as característias de execução, sendo elas: configurações da aplicação nodejs e configurações do banco de dados postgres, respectivamente.
NOTA: os arquivos .env
e .db-postgres.env
NÃO ESTÃO PRESENTES NO REPOSITÓRIO. Isso se deve por questões lógicas (o qual os valores variam de ambiente, desenvolvedor e propósito) e de segurança. POR ISSO CADA DESENVOLVEDOR DEVE SEGUIR O FORMATO ESPECIFICADO, SENDO NECESSÁRIO A CRIAÇÃO CORRETA DESSES ARQUIVOS PARA O FUNCIONAMENTO CORRETO DO SISTEMA.
Nome | Descrição | Padrão |
---|---|---|
PORT |
Número inteiro que indica o número da porta que o servidor HTTP escutará as requisições. | 3000 |
DATABASE_HOST | Endereço do banco de dados postgres. | app-sistema-db |
DATABASE_PORT | Número da porta de acesso ao banco de dados postgres. | 5432 |
DATABASE_USERNAME | Nome do usuário do banco de dados postgres. | postgres |
DATABASE_PASSWORD | Senha do usuário do banco de dados postgres. | {uuid aleatório |
DATABASE_NAME | Nome do banco de dados postgres. | postgres |
# .env
PORT=3000
Nome | Descrição | Padrão |
---|---|---|
POSTGRES_DB |
Nome do banco de dados postgres. | postgres |
POSTGRES_USER |
Nome do usuário principal do banco de dados postgres. | postgres |
POSTGRES_PASSWORD |
Senha do usuário principal do banco de dados postgres. | {uuid aleatório} |
# .db-postgres.env
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=SENHA-GRANDE-MUITO-SEGURA
Com as imagens base obtidas, é possível containers os serviços utilizando o seguinte comando:
docker compose up -d
Esse comando irá iniciar os dois containers (app-sistema-node
e app-sistema-db
).
NOTA: O banco de dados estará pronto para uso confome a configuração realizada no arquivo .db-postgres.env
.
NOTA: O servidor HTTP do app-sistema-node
não inicia automaticamente. Por isso, é necessário entrar no shell
do container e executar o script npm run start:dev
para que o sistema funcione.
Por questões de conveniência, o script para inciar os seviços foi acoplado ao Makefile
, tornando, assim, iniciar os serviços uma tarefa mais simples. Tome o seguinte comando como não obrigatório, sendo apenas uma alternativa ao docker compose up -d
.
make compose-up;
Para ter acesso ao shell do container nodejs, é possível executar o seguinte comando para obter o resultado desejado:
docker compose exec -it app-sistema-node bash;
Assim, um shell bash
é iniciado na pasta do projeto (/projeto/app-sistema-node
), permitindo a execução de scripts.
Por questões de conveniência, o script para inciar os seviços foi acoplado ao Makefile
, tornando, assim, iniciar os serviços uma tarefa mais simples. Tome o seguinte comando como não obrigatório, sendo apenas uma alternativa ao docker compose exec -it app-sistema-node bash
.
make compose-shell;
Por padrão, o projeto vem sem as dependências instaladas. Para o comportamento correto desejado, faça dentro do shell da aplicação node:
npm install;
Por padrão, o banco de dados vem limpo. Para isso, existem as migrations (que criam as estruturas de dados) e as seeds (que preenchem as tabelas). Para o comportamento correto desejado, faça dentro do shell da aplicação node:
npm run db:migrate;
npm run seed:migrate;
Para iniciar o servidor da API, faça dentro do shell da aplicação node:
npm run start:dev;
Assim, o serviço estará disponível em: http://localhost:3000.
DOCUMENTAÇÃO DO SWAGGER DISPONÍVEL EM http://localhost:3000/api.
A progressive Node.js framework for building efficient and scalable server-side applications.
Nest framework TypeScript starter repository.
$ npm install
# development
$ npm run start
# watch mode
$ npm run start:dev
# production mode
$ npm run start:prod
# unit tests
$ npm run test
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please read more here.
- Author - Kamil Myśliwiec
- Website - https://nestjs.com
- Twitter - @nestframework
Nest is MIT licensed.