Skip to content

Lpfigueiredo/clean-ts-api

Repository files navigation

Build Status Coverage Status

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

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 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 construídas no treinamento

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

Resumo do projeto

  • Linguagem: TypeScript/JavaScript
  • Interpretador JavaScript: Node.js
  • Gerenciador de pacotes: npm
  • Controle de versão: Git
  • Repositório: GitHub
  • Banco de dados não-relacional: MongoDB
  • Arquitetura: Clean Architecture, API REST
  • Segurança: CORS, bcrypt
  • Autenticação: JWT
  • Testes unitários e de integração: Jest
  • Integração contínua e entrega contínua (CI/CD): Jenkins, TravisCI, Coveralls
  • Princípios de design e desenvolvimento: TDD, SOLID, KISS, YAGNI, DRY
  • Conteinerização: Docker
  • Documentação: Swagger
  • Proxy reverso: Nginx
  • Provedor de serviço de nuvem: Heroku

Princípios

  • Single Responsibility Principle (SRP)
  • Open Closed Principle (OCP)
  • Liskov Substitution Principle (LSP)
  • Interface Segregation Principle (ISP)
  • Dependency Inversion Principle (DIP)
  • Separation of Concerns (SOC)
  • Don't Repeat Yourself (DRY)
  • You Aren't Gonna Need It (YAGNI)
  • Keep It Simple, Silly (KISS)
  • Composition Over Inheritance
  • Small Commits

Design Patterns

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

Metodologias e Designs

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

Bibliotecas e Ferramentas

  • NPM
  • Typescript
  • Git
  • Docker
  • Jest
  • MongoDb
  • Travis CI
  • Swagger
  • Bcrypt
  • JsonWebToken
  • Faker
  • Coveralls
  • Validator
  • Express
  • Supertest
  • Husky
  • Lint Staged
  • Eslint
  • Standard Javascript Style
  • Sucrase
  • Nodemon
  • Rimraf
  • In-Memory MongoDb Server
  • MockDate
  • Module-Alias
  • Copyfiles
  • Npm Check

Features do Node

  • Documentação de API com Swagger
  • 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 Git

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

Features do Typescript

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

Features de Testes

  • Testes Unitários
  • Testes de Integração
  • Cobertura de Testes
  • Test Doubles
  • Mocks
  • Stubs
  • Spies
  • Fakes

Features do MongoDB

  • Connect e Reconnect
  • Collections
  • InsertOne e InsertMany
  • 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

Feito de 💜 por: Leonardo Paulo Figueiredo

About

API do curso de NodeJs do Rodrigo Manguinho

Resources

License

Stars

Watchers

Forks

Packages

No packages published