Refactor/project #1
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Foi um refactor na aplicação como um todo visando melhorar algumas coisas (que podem ser melhoradas ainda mais)
Algumas atualizações explicadas:
Melhorias aplicadas
Algumas funções como arquivos da pasta
Cryptopossuiam um conteudo bem parecido, mudando poucos dados, por exemplo:Nos 2 arquivos acima por exemplo, a estrutura é a mesma, alterando apenas qual a função, como
CryptoJS.DESouCryptoJS.AESe boa parte dos outros arquivos seguiam o mesmo exemplo.Dessa forma resolvi criar o cipher.service.js com intuito de ele lidar apenas com as criptografias em comuns, que usam dos metodos
.encrypt,.decryptou mesmo os que usam eles mesmos, como é o caso por exemplo doSHA1, que é chamado assimCryptoJS.SHA1(encryptMessage).Então esse arquivo tem a responsabilidade de lidar com os métodos e boa parte das criptografias do
CryptoJS.Para ser utilizado basta você instanciar falando qual a criptografia a ser utilizada, por exemplo:
Ainda no mesmo arquivo, existiam alguns arquivos nomeados
encryptingque também tinham sempre comportamentos bem parecidos, exemplo:esse arquivo tinha responsabilidade de lidar de lidar com o fator de criar um readStream, fazer o parse dos dados de um CSV usando o metodo
parsedocsv-parse, e também escrevia os dados no path especificadoPara tornar isso mais reutilizavel, criei o read-stream-from-csv.service.js.
Ele tem uma responsabilidade um pouco menor, lidando com 2 coisas comuns em todos arquivos de encrypting, o
fs.createReadStreame oparsedos dados CSV. Então ele só faz isso e retorna oReadStreampara quem for consumir, usar os eventos que forem necessários, como por exemplo o.on('data', () => {}).Os arquivos da pasta Files que já tinha uma boa responsabilidade, foram apenas refatorados como uma classe usando metodos estáticos e agora chamados de
file.service.js, possuindo 2 metodosFileService.read(filePath)eFileService.write({ path, data }).As rotas foram separadas em um arquivo chamado
routes.js, que possui apenas o vinculo entrequal a rotaequal função será chamada para essa rota.Na parte das rotas agora existe uma rota com
/:cryptography/encryptingou/:cryptography/decrypting, que basicamente é umparametro dinamicoque vai ser recebido na função através doconst { cryptography } = req.paramsno código e dessa forma podemos tratar para poder usar docipher.service.jspara ter mais re-uso de códigoTodas as responsabilidades de cada rota, foi extraia para pasta
src/handlers, então todas rotas estão lá, de forma isolada e separadas.Cada
handler, usa os recursos necessários e emite uma resposta.As respostas emitidas através do
res.json()foram padronizadas usando uma classe chamadahttp-response.jslocalizada na pasta./src/utils/http-response.js.Basicamente foram separados em algusn métodos estáticos, que tem como função, retornar uma instancia da propria classe HttpResponse atribuindo alguns dados, exemplo:
vai retornar alguns dados seguindo o padrões de alguns campos existentes no HttpResponse, então a resposta seria:
{ "code": 200, "message": "Deu certo!", "data": { "wordlistEncrypted": [] }, "error": false }apenas para garantir uma consistencia de padrões de resposta. Também existem alguns outros métodos como
HttpResponse.erroreHttpResponse.created.E foi criado também um
handlerpara exibição de erros usando o mesmoHttpResponse, chamadoerrorHandler, que apenas vai garantir uma visualização dos erros na API de forma que o servidor continue de pé, e exista alguma informação retornada na API.E é isso, existem muito mais melhorias que podem ser aplicadas, tentei deixar um pouco do que pensei pra fazer esse refactor, e independente do mesmo for aceito ou não, a idéia é que ajude alguem! hehe. é isso é noix!