IagoRochaPorto / clean-node

Repo for a Project built with Clean Architecture, Test Driven Development and Domain Driven Design code for learning purposes

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status Coverage Status

Clean Node API

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.

APIs built on this course

  1. Signup
  2. Login

Principles

  • 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

Design Patterns

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

Methodologies and Designs

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

Libs and Tools

  • 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

Node Features

  • 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

Features of GraphQL

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

Features of Git

  • Alias
  • Custom logs
  • Branch
  • Reset
  • Amend
  • Tag
  • Stash
  • Rebase
  • Merge

Features of Typescript

  • Advanced POO
  • Interface
  • TypeAlias
  • Namespace
  • Utility Types
  • Paths Modularization
  • Configuration
  • Build
  • Deploy
  • Breakpoints usage

Features of Tests

  • Unit Tests
  • Integration Tests (Rest API & GraphQL)
  • Tests Coverage
  • Test Doubles
  • Mocks
  • Stubs
  • Spies
  • Fakes

Features of MongoDb

  • 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

About

Repo for a Project built with Clean Architecture, Test Driven Development and Domain Driven Design code for learning purposes


Languages

Language:TypeScript 99.3%Language:JavaScript 0.7%