#Clean Node API

Essa API faz parte do treinamento do professor rodrigo manguinho (mango) na udemy

Link para o treinamento

o objetivo do 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 distruibuição de responsabilidades em camadas, sempre seguindo os principios do solid e, sempre que possivel, 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 enquete

  6. resultado da enquete

    Principios aplicados:

  • Single Responsability Principle (SRP)

  • Open Closed Principle (OCP)

  • Liskov Substitution Principle (LSP)

  • Interface Segregation Principle (ISP)

  • Dependency Inversion Principle (DIP)

  • Dont Repeat Yourself (DRY)

  • Composition Over Inheritance

  • Small Commits

    Design Patterns aplicados:

  • Factory

  • Adapter

  • Composite

  • Decorator

  • Proxy

  • Dependency Injection

  • Abstract Server

  • Composition Root

    Metodologias/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:

  • yarn

  • TypeScript

  • Git

  • Docker

  • Jest

  • MongoDB

  • Travis CI

  • Coveralls

  • Bcrypt

  • jsonWebToken

  • Validator

  • Express

  • Supertest

  • Husky

  • Lint Staged

  • Eslint

  • Standard JavaScript Style

  • Sucrase

  • Nodemon

  • Rimraf

  • in-Memory MongoDb Server

    Features abordadas

  • Atalhos no Git

  • Log de Erro

  • Segurança (Hashing, Encryption e Encoding)

  • CORS

  • Middlewares

  • Testes de Integração

  • Testes Unitários

  • Cobertura de Testes

  • Mocks

  • Stubs

  • Spies

  • Deploy com Typescript

  • Deploy com Heroku

  • Uso de breakpoints no Typescript

  • Uso correto de tags no Git