API em NodeJS, utilizando banco de dados MongoDB (TypeORM), com cobertura de testes (coverages), utilizando o Jest

Overview

Api Backend Tindin

Sobre

API em NodeJS, utilizando banco de dados MongoDB (TypeORM), com cobertura de testes (coverages), utilizando o Jest.
👉 app url

Paths

Login do user

👉 http://143.198.112.106:3011/users/login (POST)

{
    "email": "[email protected]",
    "password": "G1rafarosa#"
}

Registro de user

👉 http://143.198.112.106:3011/users (POST)

{
    "name": "Tiago Rizzo",
    "email": "[email protected]",
    "password": "T1ag0rizzo#"
}

Cria a aula

👉 http://143.198.112.106:3011/classes (POST)

{
    "name": "Inglês",
    "description": "Aula de inglês ao vivo",
    "video": "http://inglesaovivo.com",
    "date_init": "12-12-2021",
    "date_end": "12-21-2021"
}

Atualiza a aula

👉 http://143.198.112.106:3011/classes/{id} (PUT)

{
    "name": "Portugês",
    "description": "Aula de portugês ao vivo",
    "video": "http://inglesaovivo.com",
    "date_init": "12-12-2021",
    "date_end": "12-21-2021"
}

Lista as aulas

👉 http://143.198.112.106:3011/classes (GET)

{}

Mostra detalhes de uma aula

👉 http://143.198.112.106:3011/classes/{id} (GET)

{}

Deleta uma aula

👉 http://143.198.112.106:3011/classes/{id} (DELETE)

{}

Cria comentário

👉 http://143.198.112.106:3011/classes/comments (POST)

{
    "id_class": "61e7952ab7b18add1344cde7",
    "comment": "Comentário sobre a aula de português..."
}

Lista comentários

👉 http://143.198.112.106:3011/comments (GET) s

{}

Mostra detalhes de um comentário

👉 http://143.198.112.106:3011/classes/comments/{id} (GET)

{}

Deleta um comentário

👉 http://143.198.112.106:3011/classes/comments/{id} (DELETE)

{}

Recursos utilizados

NodeJs Typescript Javascript Jest

  • Typescript
  • Docker / Docker compose
  • Arquitetura Feature By Package
  • Conceitos do DDD, como repository, providers, modules e etc.
  • Framework Express
  • Testes com coverages (Jest)
  • Serviço Sentry para catalogar errors
  • TypeOrm
  • JWT
  • Assincronismo de errors
  • Injeção de dependência com a biblioteca tsyringe
  • Babel para build, resolvendo o problema dos paths
  • Criação de seed para criar o user Admin
  • Helmet
  • Morgan
  • Validação nos DTOs com a biblioteca class-validator
  • Padrões de projeto (Chain of responsability, Strategy, Factory)
  • Gitflow (develop/master/main)
  • Utilização de padronização de commits (convetional commits)
  • Makefile

Sugestões futuras

  • Utilizar o Swagger para documentar a API.
  • Utilização de cache com Redis, utilizando o padrão proxy para login do usuário.
  • Utilizar cache na parte de listagem de aulas e comentários.
  • Utilizar filas com o bull para resolver a remoção em cascata dos documentos relacionados.
  • Utilizar o rate limit para mitigar a idempotência dos métodos posts.

Vantagens da arquitetura Feat By Packages

  • Manutenção: Facilita o engajamento de multiplas equipes e colaboradores em um projeto;
  • Escalável: Facilita refatoramento do código monolítico para uma uma estrura de microserviços;
  • SOLID: Facilita a aplicação de todos os princípios do SOLID;
  • Git: Melhora o gerenciamento dos commits, evitando conflitos e etc;
  • Testes: Facilita o desenvolvimento de testes de unidade e integração.

Outras informações

O projeto tem como gerencimento de pacotes o Yarn e o Makefile como automação de comandos, além disso, o MongoDB é um container do Docker.

Padrão de projeto: Middleware

👉 Na linha 12, é possível observar o funcionamento do padrão de projeto, onde os contextos podem ser observados em: path (nó inicial), authenticate, validade e handle (nó folha).

Gitflow

Testes com coverages reports

Instruções para rodar a API

Pré-requisitos

  • NodeJs v12.22.9
  • Yarn v1.21.1
  • Docker v20.10.12, build e91ed57
  • Docker compose v1.29.2, build 5becea4c
  • Makefile para rodar os aliases

passo a passo

# Para clonar repositório
git clone https://github.com/venzel/api-tindin.git

# Para entrar na pasta do projeto
cd api-tindin

# Renomear arquivo .env.example para .env
cp -r .env.example .env

# Inserir as variáveis de ambiente no arquivo .env
# Para gerar a o SENTRY_DSN: https://sentry.io/
# Para gerar os TOKEN_SECRET e TOKEN_SECRET_REFRESH http://www.md5.cz/
SENTRY_DSN=
TOKEN_SECRET=
TOKEN_SECRET_REFRESH=

# Para instalar os pacotes
make install

# Para rodar os testes
make test

# Para subir o container do mongodb na porta 27017
make up

# Para rodar as seeds do projeto (email: [email protected], senha: G1rafarosa#)
make seed

# Para executar o projeto na porta 3010
make run

Autor

Enéas Almeida

You might also like...

A Restaurant (Table) Reservation API built with Node, TypeScript, Express, TypeORM, a MySQL DB, all running on Docker containers

Restaurant (Table) Reservation API A simple API for reserving tables at a restaurant. The API is based on the REST architectural style and uses Node.j

Oct 5, 2022

🐶 Puppies Rest Api built with NestJs, TypeOrm, PostgreSQL, Swagger

🚀 Quick start: Install node Install nest cli: `npm i -g @nestjs/cli` Initialize a nestjs project `nest new project-name` Swagger Docs swagger docs P

Oct 1, 2022

This is boilerplate of express, typescript and postgreSql with typeorm and docker based setup

express-typescript-postgres-typeorm-docker-swagger-boilerplate This is boilerplate of express, typescript and postgreSql with typeorm and docker based

Jun 2, 2022

🎯 Plataforma para acesso aos dados de perfis de usuários do Github.

🎯 Github Profile 🚀 Desafio Front End | Compass.UOL Tecnologias | Projeto | Como rodar | Licença demo.mp4 🚀 Tecnologias 💻 Projeto Esse projeto é um

Mar 30, 2022

Projeto de código aberto para ajudar as pessoas a ingressarem em carreiras de dados

Bem vinde O que é o Data Career Guide? É um projeto gratuito de guia (não é um curso e nem um livro) para carreiras na área de dados, inspirado no Lea

Dec 30, 2022

A developer directory built on Next.js and MongoDB Atlas, deployed on Vercel with the Vercel + MongoDB integration.

A developer directory built on Next.js and MongoDB Atlas, deployed on Vercel with the Vercel + MongoDB integration.

MongoDB Starter – Developer Directory A developer directory built on Next.js and MongoDB Atlas, deployed on Vercel with the Vercel + MongoDB integrati

Dec 20, 2022

Mongo Strict is a TypeScript based smart MongoDB ORM, It makes the usage of MongoDB safer, easier and faster with a better performance...

mongo-strict mongo-strict is compatible with mongo = 5 Mongo Strict is a TypeScript-based smart MongoDB ORM, It makes the usage of MongoDB safer, eas

Sep 22, 2022

API Bate Papo UOL - A backend application developed using NodeJS and mongoDB

BatePapoUOL BackEnd My first backend project! Building an API to the most used brazillian chat app ages ago - Bate Papo UOL! Table of Contents Overvie

Apr 13, 2022

@Ifycode's buuk API (nodejs, expressjs, mongodb)

@Ifycode/buuks-express-api Hosted on Heroku: https://buuks-express-api.herokuapp.com "Buuks" instead of "books"... Another angle 😉 The API allows an

Apr 21, 2022
Owner
Enéas Almeida
Fullstack | NodeJs | NestJs | Typescript | Spring Boot | Java | VueJs | Angular. Graduando em Engenharia de Computação (2017 - 2022).
Enéas Almeida
Projeto individual, um site para cobertura de partidas de vôlei, times onde você pode saber onde, quando acontecerá as partidas, e dados sobre os times.

?? Volleyball Esports Coverage Um portal de vôlei para as pessoas se conectarem ou divulgarem suas partidas, conhecimentos e uma maneira de conhecerem

PedroJsn 4 Jun 6, 2022
API desenvolvida em NodeJs sem o uso de framewors e, utilizando o google planilhas para armazenamento de dados

NodeJS + Google SpreadSheet Catálogo online de produtos ??️ O Projeto Desenvolver uma API de busca de informações como preço médio, marca e categoria,

Arthur Couto 10 Jul 14, 2022
Projeto de exemplo para realização de testes de integração (API) utilizando o Cypress

Projeto de exemplo para realização de testes de integração (API) utilizando o Cypress

Robson Agapito Correa 14 Nov 28, 2022
⚙️ REST api with NodeJS(KoaJS) MongoDB and Jest Tests.

RESTRIS Functional Backend implementation of REST api with NodeJS(KoaJS) MongoDB and Jest Tests. Tools TypeScript Node KoaJS MongoDB Mongoose Jest Sup

Beatriz Oliveira 8 Dec 2, 2022
Uma Api dos 151 primeiros pokemons utilizando NodeJS, Typescript, Docker, MongoDB e Mongoose.

Pokedex API Tópicos Preview Sobre o Pokedex Api Tecnologias Instalação e uso Preview Clique aqui para ter acesso a um preview da Api. Sobre o Pokedex

Marlon Lacerda 3 Nov 27, 2022
API REST de código aberto para testes frontend aplicando CRUD.

OPEN CRUD API API pública para cadastro de usuários para ser usada em testes. Ajustes e melhorias O projeto ainda está em desenvolvimento e as próxima

Pedro Henrique 5 Mar 22, 2022
sistema de bate ponto para os aprendizes da brisa, usando Angular no frontend, golang no backend e postgresql como banco.

Migule Points Este projeto tem o intuito de automatizar a frequência dos aprendizes da brisanet, usando Angular no front, Golang no backend e postgres

Pedro Miguel 3 Sep 26, 2022
Back-end desenvolvido com NodeJS, TypeScript, Prisma e Express para prover dados para as aplicações em desenvolvimento.plicações do evento NLW eSports.

NLW eSports Back-End Aplicação back-end para surprir as necessidades de dados das demais plataformas desenvolvidas que são citadas mais abaixo. Este s

Felippe Rian 2 Sep 17, 2022
🥾 A simple way to do testing AWS Services and Jest or Serverless and Jest

jest-localstack-preset Install Install via yarn or npm $ yarn add https://github.com/thadeu/jest-localstack-preset.git or $ npm i https://github.com/t

thadeu 5 Oct 1, 2022
A Restaurant (Table) Reservation API built with Node, TypeScript, Express, TypeORM, a MySQL DB, all running on Docker containers

Restaurant (Table) Reservation API A simple API for reserving tables at a restaurant. The API is based on the REST architectural style and uses Node.j

null 14 Oct 5, 2022