Git Product home page Git Product logo

iti-backend-challenge's Introduction

Índice

  1. Introdução
  2. Problema
    1. Condições de Validação da Senha
    2. Condições Assumidas
  3. Solução
  4. Instruções de Uso
    1. Instalação
    2. Utilização
    3. Executando os testes
  5. Foram utilizados no Projeto
    1. Design Patterns
    2. Metodologias e Designs
    3. Bibliotecas e Ferramentas
    4. Features de Testes

Introdução

Este repositório é a solução do problema ITI Backend Challenge. A linguagem utilizada para a solução foi NodeJS com Typescript.

Problema

Construa uma aplicação que exponha uma api web que valide se uma senha é válida.

Input: Uma senha (string). Output: Um boolean indicando se a senha é válida.

Condições de Validação da Senha

  • Nove ou mais caracteres
  • Ao menos 1 dígito
  • Ao menos 1 letra minúscula
  • Ao menos 1 letra maiúscula
  • Ao menos 1 caractere especial
    • Considere como especial os seguintes caracteres: !@#$%^&*()-+
  • Não possuir caracteres repetidos dentro do conjunto

Condições Assumidas

  • Caso a senha possua algum caractere especial fora da lista citada, ela é considerada uma senha inválida.

Essa condição assumida foi motivada pelo fato da biblioteca Validator.js utilizar uma lista maior de caracteres especiais, portanto seria necessária uma regra de negócio externa que filtrasse a senha antes de passá-la pelas condições da biblioteca.

Solução

A partir do problema dado foi feita uma primeira versão do sistema que realizava algumas validações com RegEx e a biblioteca Validator.js e passava nas situações testadas a mão. Esta solução foi exposta via API através do framework Express.

A opção de utilizar uma biblioteca externa se deu pelo fato de ser amplamente utilizada pela comunidade e open-source, tendo sua solução já sido testada, tendo apenas que passar as condições de validação como opção para tal biblioteca.

A partir desta solução um diagrama de dependências foi criado baseado em Arquitetura Limpa, separando as regras de negócio de frameworks externos.

Dado que a primeira versão foi assumida como certa, a próxima etapa para refatoração em Arquitetura Limpa foi toda baseada em Desenvolvimento Guiado por Testes, buscando o desacoplamento da solução de forma íntegra.

Instruções de Uso

Instalação

Para instalação desta solução basta fazer:

git clone https://github.com/a-nunes/iti-backend-challenge
cd iti-backend-challenge
npm install
npm run build
npm start

Utilização

Faça uma requisição POST para http://localhost:3000/api/validation com um JSON da seguinte forma:

{
 "password": "AbTp9!fok"
}

As respostas retornadas pelo sistema podem ser:

  1. Status 200 OK - Resposta: true ou false
  2. Status 400 Bad Request - Resposta: um JSON com a propriedade error e a mensagem de erro.

Executando os testes

Para executar os testes unitários e de integração, basta executar o seguinte comando:

npm run test

Para executar os testes de mutação, basta executar o seguinte comando:

npx stryker run

Foram utilizados no Projeto

Design Patterns

  • Factory
  • Adapter
  • Singleton
  • Command
  • Dependency Injection

Metodologias e Designs

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

Bibliotecas e Ferramentas

  • NPM
  • Typescript
  • Git
  • Jest
  • Ts-Jest
  • Jest-Mock-Extended
  • Express
  • Cors
  • Supertest
  • Husky
  • Lint Staged
  • Eslint
  • Standard Javascript Style
  • Rimraf
  • Module-Alias
  • DotEnv
  • Ts-Node-Dev

Features de Testes

  • Testes Unitários
  • Testes de Integração
  • Testes de Mutação
  • Cobertura de Testes
  • Mocks
  • Fakes

iti-backend-challenge's People

Contributors

a-nunes avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.