https://github.com/rmanguinho/clean-ts-api
API em NodeJs usando Typescript, TDD, Clean Architecture, Design Patterns e SOLID principles
https://github.com/rmanguinho/clean-ts-api
clean-architecture clean-code coveralls design-patterns docker docker-compose dockerfile graphql husky jest lint-staged mongodb nodejs rest-api solid tdd travis-ci typescript
Last synced: 8 days ago
JSON representation
API em NodeJs usando Typescript, TDD, Clean Architecture, Design Patterns e SOLID principles
- Host: GitHub
- URL: https://github.com/rmanguinho/clean-ts-api
- Owner: rmanguinho
- License: gpl-3.0
- Created: 2020-01-24T17:51:41.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2024-11-27T13:53:24.000Z (5 months ago)
- Last Synced: 2025-04-06T04:01:38.828Z (15 days ago)
- Topics: clean-architecture, clean-code, coveralls, design-patterns, docker, docker-compose, dockerfile, graphql, husky, jest, lint-staged, mongodb, nodejs, rest-api, solid, tdd, travis-ci, typescript
- Language: TypeScript
- Homepage: https://rmanguinho.github.io/
- Size: 2.8 MB
- Stars: 1,886
- Watchers: 51
- Forks: 496
- Open Issues: 33
-
Metadata Files:
- Readme: readme.md
- License: license
Awesome Lists containing this project
README
[](https://travis-ci.org/rmanguinho/clean-ts-api)
[](https://coveralls.io/github/rmanguinho/clean-ts-api)
[](https://snyk.io/test/github/rmanguinho/clean-ts-api)
[](http://standardjs.com)
[](https://opensource.org/licenses/)
[](https://opensource.org/)# **Clean Node API**
[](https://www.udemy.com/course/tdd-com-mango/?referralCode=B53CE5CA2B9AFA5A6FA1)
---
## [**Link para o curso completo**](https://www.udemy.com/course/tdd-com-mango/?referralCode=B53CE5CA2B9AFA5A6FA1)
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.
## Contribua com esse Projeto <3
## [**Link para a documentação da API**](http://fordevs.herokuapp.com/api-docs)
> ## APIs construídas no 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)
* 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
* Singleton> ## 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
* Apollo Server Express
* Graphql
* Graphql ISO Date
* Graphql Scalars
* Graphql Tools
* 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> ## Features do Node
* Documentação de API com Swagger
* API Rest com Express
* GraphQL com Apollo Server
* 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 GraphQL
* Types
* Queries
* Mutations
* Resolvers
* Directives
* Scalars
* Plugins> ## Features do Git
* Alias
* Log Personalizado
* Branch
* Reset
* Amend
* Tag
* Stash
* Rebase
* Merge> ## Features do Typescript
* POO Avançado
* Interface
* TypeAlias
* Namespace
* Utility Types
* Modularização de Paths
* Configurações
* Build
* Deploy
* Uso de Breakpoints> ## Features do GraphQL
* Resolvers
* Type Definitions
* Directives
* Scalars
* Plugins
* Error Handling> ## Features de Testes
* Testes Unitários
* Testes de Integração (API Rest & GraphQL)
* Cobertura de Testes
* Test Doubles
* Mocks
* Stubs
* Spies
* Fakes> ## Features do MongoDb
* Connect e Reconnect
* Collections
* InsertOne e InserMany
* 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