josilene-silva / clean-node-api

API desenvolvida com NodeJs, Typescript, TDD, DDD, Clean Architecture e SOLID

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

GitHub top language GitHub package.json version (subfolder of monorepo) Snyk Vulnerabilities for GitHub Repo

eslint js-standard-style TypeScript lint-staged Jest ts-jest husky git-commit-msg-linter sucrase Express MongoDB Validator

Clean Node API

Essa API faz parte do curso do professor Rodrigo Manguinho (Mango) na Udemy.

O objetivo do curso é 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.

Navegação

Requisitos

Para rodar a aplicação, você precisará ter instalado na sua máquina:

Como Rodar

Instale as dependências:

$ npm i

Execute a aplicação:

$ npm start

Princípios Utilizados

  • 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
  • Dependency Injection
  • Composition Root

Metodologias e Designs

  • TDD
  • Clean Architecture
  • DDD
  • Conventional Commits
  • GitFlow
  • Modular Design
  • Dependency Diagrams
  • Use Cases

Funcionalidades

1.Cadastro

Casos de sucesso

  1. Recebe uma requisição do tipo POST na rota /api/signup
  2. Valida dados obrigatórios name, email, password e passwordConfirmation
  3. Valida que password e passwordConfirmation são iguais
  4. Valida que o campo email é um e-mail válido
  5. Valida se já existe um usuário com o email fornecido
  6. Gera uma senha criptografada (essa senha não pode ser descriptografada)
  7. Cria uma conta para o usuário com os dados informados, substituindo a senha pela senha criptorafada
  8. Gera um token de acesso a partir do ID do usuário
  9. Atualiza os dados do usuário com o token de acesso gerado
  10. Retorna 200 com o token de acesso e o nome do usuário

Exceções

  1. Retorna erro 404 se a API não existir
  2. Retorna erro 400 se name, email, password ou passwordConfirmation não forem fornecidos pelo usuário
  3. Retorna erro 400 se password e passwordConfirmation não forem iguais
  4. Retorna erro 400 se o campo email for um e-mail inválido
  5. Retorna erro 403 se o email fornecido já estiver em uso
  6. Retorna erro 500 se der erro ao tentar gerar uma senha criptografada
  7. Retorna erro 500 se der erro ao tentar criar a conta do usuário
  8. Retorna erro 500 se der erro ao tentar gerar o token de acesso
  9. Retorna erro 500 se der erro ao tentar atualizar o usuário com o token de acesso gerado

Arquitetura

2.Login

Casos de sucesso

  1. Recebe uma requisição do tipo POST na rota /api/login
  2. Valida dados obrigatórios email e password
  3. Valida que o campo email é um e-mail válido
  4. Busca o usuário com o email e senha fornecidos
  5. Gera um token de acesso a partir do ID do usuário
  6. Atualiza os dados do usuário com o token de acesso gerado
  7. Retorna 200 com o token de acesso e o nome do usuário

Exceções

  1. Retorna erro 404 se a API não existir
  2. Retorna erro 400 se name, email, password ou passwordConfirmation não forem fornecidos pelo usuário
  3. Retorna erro 400 se password e passwordConfirmation não forem iguais
  4. Retorna erro 400 se o campo email for um e-mail inválido
  5. Retorna erro 500 se der erro ao tentar gerar uma senha criptografada
  6. Retorna erro 500 se der erro ao tentar criar a conta do usuário

About

API desenvolvida com NodeJs, Typescript, TDD, DDD, Clean Architecture e SOLID


Languages

Language:TypeScript 98.6%Language:JavaScript 1.1%Language:Shell 0.3%