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.
- 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
- 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
- Factory
- Adapter
- Composite
- Decorator
- Proxy
- Dependency Injection
- Abstract Server
- Composition Root
- Builder
- TDD
- Clean Architecture
- DDD
- Conventional Commits
- GitFlow
- Modular Design
- Dependency Diagrams
- Use Cases
- Continuous Integration
- Continuous Delivery
- Continuous Deployment
- 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
- 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
- Alias
- Log Personalizado
- Branch
- Reset
- Amend
- Tag
- Stash
- Rebase
- Merge
- POO Avançado
- Interface
- TypeAlias
- Utility Types
- Modularização de Paths
- Build
- Deploy
- Uso de Breakpoints
- Testes Unitários
- Testes de Integração
- Cobertura de Testes
- Test Doubles
- Mocks
- Stubs
- Spies
- Fakes
- 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