An open API service indexing awesome lists of open source software.

https://github.com/williamkoller/clean-ts-api

API em NodeJs usando Typescript, TDD, Clean Architecture, Design Patterns e SOLID principles
https://github.com/williamkoller/clean-ts-api

clean-architecture composite design-patterns mongodb nodejs solid survey tdd typescript typescript-generator

Last synced: 3 months ago
JSON representation

API em NodeJs usando Typescript, TDD, Clean Architecture, Design Patterns e SOLID principles

Awesome Lists containing this project

README

          

[![Build Status](https://travis-ci.com/williamkoller/clean-ts-api.svg?branch=master)](https://travis-ci.com/williamkoller/clean-ts-api)
[![Coverage Status](https://coveralls.io/repos/github/williamkoller/clean-ts-api/badge.svg?branch=master)](https://coveralls.io/github/williamkoller/clean-ts-api?branch=master)
[![Known Vulnerabilities](https://snyk.io/test/github/williamkoller/clean-ts-api/badge.svg)](https://snyk.io/test/github/williamkoller/clean-ts-api)
[![GPLv3 License](https://img.shields.io/badge/License-GPL%20v3-yellow.svg)](https://opensource.org/licenses/)
[![Open Source](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://opensource.org/)
![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/williamkoller/clean-ts-api)
[![time tracker](https://wakatime.com/badge/github/williamkoller/clean-ts-api.svg)](https://wakatime.com/badge/github/williamkoller/clean-ts-api)

# **Clean Node API**

Essa API faz parte do treinamento do professor Rodrigo Manguinho (Mango) 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 previstas para esse treinamento

1. [Cadastro](./requirements/signup.md)
2. [Login](./requirements/login.md)
3. [Criar enquete](./requirements/add-survey.md)
4. [Listar enquetes](./requirements/load-surveys.md)
5. [Responder enquete](./requirements/save-survey-result.md)
6. [Resultado da enquete](./requirements/load-survey-result.md)

> ## Princípios

* Single Responsibility Principle (SRP)
* Open Closed Principle (OCP)
* Liskov Substitution Principle (LSP)
* Interface Segregation Principle (ISP)
* Dependency Inversion Principle (DIP)
* 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

> ## 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
* Coveralls
* Bcrypt
* JsonWebToken
* Validator
* Express
* Supertest
* Husky
* Lint Staged
* Eslint
* Standard Javascript Style
* Sucrase
* Nodemon
* Rimraf
* In-Memory MongoDb Server
* MockDate
* Module-Alias

> ## Features do Node

* 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

> ## 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
* Mocks
* Stubs
* Spies