Giter VIP home page Giter VIP logo

iheroes's Introduction

IHeroes API v1.0.0

GitHub language count License Stargazers

API incrível para demonstração de habilidades técnicas como desenvolvedor backend.

Contém rotas HTTP para o gerenciamento completo de super heróis e combate de ameaças ao redor do mundo.

A lógica da aplicação conecta o servidor ao socket.io que dispara ameaças a cada 30 segundos.

Para resolver a ameaça, essa aplicação considera a latitude e longitude de cada herói, enviando o herói mais próximo e com nível adequado para cada tipo de ameaça.

Features Incluídas

  • Autenticação e cadastro ✅

  • CRUD de heróis ✅

  • Alocação de heróis ✅

  • Histórico de ameaças ✅

  • Alocação de heróis inteligente ✅

Tecnologias Utilizadas

  • Docker
  • Node.js
  • Express
  • Cors
  • Jsonwebtoken
  • Postgres
  • MongoDB
  • Node-schedule

Pré Requisitos

O ambiente do projeto está dockerizado, portanto, instale antes de prosseguir, link de referencia.

Sobre o Docker

A aplicação utiliza as imagens postgres e mongodb diretamente do dockerhub e a imagem app criada através do arquivo Dockerfile.

A imagem app tem multiplos passos de criação, separando a responsabilidade de build e execução, melhorando aspectos de tamanho e performance da imagem construída.

Iniciando a aplicação

Para iniciar a aplicação na porta 3333, executado com o comando:

    docker-compose up

Testes

Os testes de aplicação podem ser realizados diretamente no container, execute o comando:

    docker-compose run app npm test

Estrutura da aplicação

Todo código fonte da aplicação está mantido em src.

A aplicação utiliza uma chave secret.key para assinar o JWT durante a autenticação do usuário.

Design Patterns

Chain of Responsibility é um padrão de design comportamental que permite passar solicitações ao longo de uma cadeia de manipuladores. Ao receber uma solicitação, cada manipulador decide processá-la ou passá-la para o próximo manipulador na cadeia.

Observer é um padrão de design comportamental que permite definir um mecanismo de assinatura para notificar vários objetos sobre quaisquer eventos que aconteçam com o objeto que eles estão observando.

Builder é um padrão de design criacional que permite construir objetos complexos passo a passo. O padrão permite produzir diferentes tipos e representações de um objeto usando o mesmo código de construção.

Singleton é um padrão de design criacional que permite garantir que uma classe tenha apenas uma instância, ao mesmo tempo que fornece um ponto de acesso global para essa instância.

Single responsibility principle cada classe deveria ter apenas uma responsabilidade

Open-closed principle entidades de software (classes, módulos, funções, etc.) devem ser abertas para extensão, mas fechadas para modificação.

Banco de dados

A aplicação utiliza banco de dados relacional (postgres) e não relacional (mongodb), a propósito de demonstração de conhecimento.

O banco de dados SQL pode ser gerenciado pela ferramenta de linha de comando sequelize-cli, as configurações estão presentes no diretório config.

Migrations e Seeds

O utilitário sequelize-cli está configurado para realizar e reverter alterações no banco de dados utilizando os diretórios migrations e seeders.

Rotas de aplicação

As rotas da aplicação podem ser importadas pelo arquivo zrp-challenge-requests-http.json utilizando o insomnia.

Descrição das rotas:

Authenticação

# [POST] Cadastro de novos usuários
http:localhost:3333/auth/signup   
# [POST] Login de usuários cadastrados
http:localhost:3333/auth/signin  

Heróis

# [GET] Leitura de heróis
http:localhost:3333/heroes  
# [POST] Cadastro de heróis
http:localhost:3333/heroes  
# [PUT] Alteração de heróis
http:localhost:3333/heroes/:id 
# [DELETE] Remoção de heróis
http:localhost:3333/heroes/:id

Ameaças

# [GET] Lista de ameaças a serem resolvidas
http:localhost:3333/threats  

Ocorrencias

# [POST] Cadastro de nova ocorrência
http:localhost:3333/occurrence

Batalhas

# [GET] Lista de batalhas (Ameaças resolvidas)
http:localhost:3333/battles  

Scripts

A seguir uma breve descrição dos scripts:

Build

    npm run build # Executa o compilador typescript

Start

    npm start # Inicia a aplicação node javascript

Lint

    npm run lint # Padroniza o código fonte com regras eslint

Migration

  npm run migration # Executa comandos DDL no banco de dados postgres

Seeds

  npm run seeds # Insere uma lista de heróis pré-definida no banco de dados.

Test

O framework utilizado para testes é o vitest e o seu arquivo de configuração é o vite.config.mjs.

O script de test também invoca os scripts pretest e posttest, responsáveis por configurar o banco de dados de teste da aplicação e reverter as alterações após os testes.

  npm test # Executa os testes da aplicação

Dev

  npm run dev # Executa a aplicação em modo desenvolvimento

Disclaimer

Para aplicação em modo produção, as variáveis de ambiente necessárias para executar o projeto não devem estar incluídas no repositório. Sendo este apenas uma demonstração, credenciais estão incluídas para facilitar a execução.

Para aplicativos de produção, utilizar .env.example com as variáveis necessárias com valor vazio.

Contributions

Colabore com o projeto através de Pull requests.

Issues

Encontrou algum erro? Reporte em Issues

iheroes's People

Contributors

gitarika avatar

Watchers

 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.