This API is the result of the course made by the professor Rodrigo Manguinho, aka "Mango" in Udemy.
The main goal of this course is show how to create an API with an api with an architecture well defined and decoupled, using TDD (Test Driven Development) as work methodology, Clean Architecture for make the distribution of the responsibilities in layers, always following the SOLID principles, and whenever possible, applying Design Patterns to solve common problems.
- 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, Stupid (KISS)
- Composition Over Inheritance
- Small Commits
- Factory
- Adapter
- Composite
- Decorator
- Proxy
- Dependency Injection
- Abstract Server
- Composition Root
- Builder
- Singleton
- 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
- Apollo Server Express
- Graphql
- Graphql ISO Date
- Supertest
- Husky
- Lint Staged
- Eslint
- Standard Javascript Style
- Sucrase
- Nodemon
- Rimraf
- In-Memory MongoDb Server
- MockDate
- Module-Alias
- Copyfiles
- Npm Check
- Bson ObjectId
- Apollo Server Integration Testing
- API documentation with Swagger
- Rest API with Express
- GraphQL with Apollo Server
- Error logs
- Security (Hashing, Encryption and Encoding)
- CORS
- Middlewares
- Level Access in routes (Admin, User and Anonymous)
- Deploy on Heroku
- Serve Static Files
- Types
- Queries
- Mutations
- Resolvers
- Directives
- Scalars
- Plugins
- Alias
- Custom logs
- Branch
- Reset
- Amend
- Tag
- Stash
- Rebase
- Merge
- Advanced POO
- Interface
- TypeAlias
- Namespace
- Utility Types
- Paths Modularization
- Configuration
- Build
- Deploy
- Breakpoints usage
- Unit Tests
- Integration Tests (Rest API & GraphQL)
- Tests Coverage
- Test Doubles
- Mocks
- Stubs
- Spies
- Fakes
- Connect and Reconnect
- Collections
- InsertOne and InserMany
- Find, FindOne and FindOneAndUpdate
- DeleteMany
- UpdateOne
- Aggregation (Match, Group, Unwind, Lookup, AddFields, Project, Sort)
- ObjectId
- Upsert and ReturnOriginal
- Push, Divide, Multiply, ArrayElemAt, Cond, Sum
- Filter, Map, Reduce, MergeObjects, ConcatArrays