Coder Social home page Coder Social logo

desafio-2023-dez-19-gabriel's Introduction

desafio-2023-dez-19-gabriel

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.

Serviços

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.

Desenvolvimento (passo a passo para subir a aplicação).

Obter o código do repositório.

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.

Ambiente de desenvolvimento.

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/.

docker: obter imagens base

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.

Configurar variáveis de ambiente

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.

.env
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
.db-postgres.env
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

docker: iniciar os containers

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;

docker: app-sistema-node: acesso ao shell

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;

API: baixar as dependências

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;

API: rodar as migrations e seeds

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;

API: iniciar servidor

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.


Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Coverage Discord Backers on Open Collective Sponsors on Open Collective Support us

Description

Nest framework TypeScript starter repository.

Installation

$ npm install

Running the app

# development
$ npm run start

# watch mode
$ npm run start:dev

# production mode
$ npm run start:prod

Test

# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

# test coverage
$ npm run test:cov

Support

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.

Stay in touch

License

Nest is MIT licensed.

desafio-2023-dez-19-gabriel's People

Contributors

guesant avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.