Coverage Status CircleCI JavaScript Style Guide

CLEAN NODE API 🚀 ✅

Essa API faz parte do treinamento do professor Rodrigo Manguinho (Mango) na Udemy.

O objetivo desse treinamento é mostrar como criar uma API com uma arquitetura bem definida e desacoplada, utilizando TDD (programação orientada a testes) como metodologia de trabalho, Clean Architecture para fazer a distribuição de responsabilidades em camadas, sempre seguindo os princípios do SOLID e, sempre que possível, aplicando Design patterns para resolver alguns problemas comuns.

APIs previstas para esse treinamento:

  1. Cadastro
  2. Login
  3. Criar enquete
  4. Listar enquetes
  5. Responder enquetes
  6. Resultado da enquete

Princípios aplicados:

  • Single Responsability Principle (SRP)
  • Open Closed Principle (OCP)
  • Liskov Substituion Principle (LSP)
  • Interface Segregation Principle (ISP)
  • Dependency Inversion Principle (DIP)
  • Don't Repeat Yourself (DRY)
  • Composition Over Inheritance
  • Small Commits

Design Patterns aplicados:

  • Factory
  • Adapter
  • Composite
  • Decorator
  • Proxy
  • Dependency Injection
  • Abstract Server
  • Composition Root

Metodologias e Designs utilizados:

  • TDD
  • Clean Architecture
  • DDD
  • Conventional Commits
  • GitFlow
  • Modular Design
  • Dependency Diagrams
  • Use Cases
  • Continuous Integration
  • Continuous Delivery
  • Continuous Deployment

Bibliotecas e ferramentas utilizadas:

  • Atlas
  • NPM
  • Typescript
  • Git
  • Docker
  • Mongodb
  • CircleCI
  • Coveralls
  • Heroku
  • Bcrypt
  • Jest
  • JsonWebToken
  • Validator
  • Husky
  • Supertest
  • Lint Staged
  • Eslint
  • Standard Javascript Style
  • Sucrase
  • Swagger
  • Faker
  • Express
  • Apollo Server Express
  • Graphql
  • Graphql ISO Date
  • Graphql Scalars
  • Graphql Tools
  • Rimraf
  • In-Memory MongoDb Server
  • MockDate
  • Module-Alias
  • Copyfiles
  • Bson ObjectId
  • Apollo Server Integration Testing

Features do Node utilizadas:

  • Documentação de API com Swagger
  • API Rest com Express
  • GraphQL com Apollo Server
  • Log de Erro
  • Segurança (Hashing, Encryption e Encoding)
  • CORS
  • Middlewares
  • Nível de Acesso nas Rotas (Admin, User e Anônimo)
  • Deploy no Heroku
  • Servir Arquivos Estáticos

Features do GraphQL

  • Types
  • Queries
  • Mutations
  • Resolvers
  • Directives
  • Scalars
  • Plugins

Features do Git

  • Alias
  • Log Personalizado
  • Branch
  • Reset
  • Amend
  • Tag
  • Stash
  • Rebase
  • Merge

Features do Typescript

  • POO Avançado
  • Interface
  • TypeAlias
  • Namespace
  • Utility Types
  • Modularização de Paths
  • Configurações
  • Build
  • Deploy
  • Uso de Breakpoints

Features do GraphQL

  • Resolvers
  • Type Definitions
  • Directives
  • Scalars
  • Plugins
  • Error Handling

Features de Testes

  • Testes Unitários
  • Testes de Integração (API Rest & GraphQL)
  • Cobertura de Testes
  • Test Doubles
  • Mocks
  • Stubs
  • Spies
  • Fakes

Features do MongoDb

  • Connect e Reconnect
  • Collections
  • InsertOne e InserMany
  • Find, FindOne e FindOneAndUpdate
  • DeleteMany
  • UpdateOne
  • Aggregation (Match, Group, Unwind, Lookup, AddFields, Project, Sort)
  • ObjectId
  • Upsert e ReturnOriginal
  • Push, Divide, Multiply, ArrayElemAt, Cond, Sum
  • Filter, Map, Reduce, MergeObjects, ConcatArrays