Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CRUD FullStack Antônio Martos Harres #87

Open
wants to merge 196 commits into
base: master
Choose a base branch
from

Conversation

wh1t3h47
Copy link

@wh1t3h47 wh1t3h47 commented Aug 7, 2021

Atenção:

⚠️ O Heroku desativa automaticamente o deploy, e a única forma de reativar é colocando informações de cartão de crédito, mesmo colocando o meu, que é internacional, ele falha ao verificar e não me deixa instalar o plugin que mantém o servidor no ar. Eu terminei ontem (dia 7/08), mas os quatro últimos commits do dia 8 foram para resolver esse problema, eu criei uma action que faz uma requisição a cada 4 horas para manter o servidor em pé.

Uma ótima notícia é que essa requisição que eu criei no Github actions está funcionando para manter o servidor no ar, ou seja, o sistema está funcional.

O que foi implementado?

Backend

  1. Queries ágeis do MongoDB (lean queries, paginação indexada por ID);
  2. Deploy do MongoDB no Atlas;
  3. Class-validator e class-transformer para proteger de vulnerabilidades de confusão de tipos e injeção de NoSQL;
  4. Serviço de importação da planilha para o Mongo;
  5. Dotenv e tipagens para o mesmo usando namespaces;
  6. Filtragem de erros e proteção de vazamento de dados sensíveis;
  7. Middleware para fazer hashing e assistir o arquivo de planilha (ideia descontinuada);
  8. CRUD completa, com deleteAll, paginação, put e post (implementado corretamente de acordo com os padrões);
  9. Testes de sucesso e falha para todas as rotas usando bash e curl;
  10. JSDoc com uma cobertura excelente de documentação.

Frontend

  1. Aplicação React otimizada ao máximo, utilizando babel, e, com vários plugins, Webpack 5, que é mais recente que o Webpack 4 - utilizado pelo create-react-app;
  2. Consumo de API centralizada com os dados originários de apenas uma fonte, trazendo uma cobertura de ataque menor;
  3. Three-step-loading, com a primeira entrega visual de um spinner de carregamento feito com CSS inline no próprio HTML;
  4. Normalize.css, Stylesheets globais de Sass que evitam imports (feito no webpack) e acesso/ utilização de variáveis, mixins e propriedades do Bootstrap diretamente e nativamente no Sass;
  5. React-router configurado de uma maneira que permite máxima escalabilidade e organização;
  6. Utilização de Grid e estilo Mansonry, assim como a utilização de FlexBox;
  7. Modal de confirmação, toasts para alertar erros e hooks render-props para class componentes;
  8. Componentes majoritariamente puros, que são melhores no desempenho;
  9. Api com cache, configurada para primeiro pegar do cache e depois fazer uma requisição em seguida, trazendo uma sensação de resposta instantânea ao usuário sem comprometer a atualidade dos dados;
  10. Boa cobertura de JSDoc;
  11. Uttilização de um truque inusitado que eu nem sabia que era possível para poder importar todas as imagens de uma pasta dentro do node_modules e mapear elas de acordo com o nome delas (no caso os sprites de Pokémon da PokeAPI), assim como a implementação de imports dinâmicos e do carregamento de um esqueleto antes de baixar as informações;
  12. Carregamento de card de Pokémon com scroll infinito, esses são baixados a medida que o usuário desce a página.

Monorepo

  1. Workflows automatizados para fazer análise estática de código, alertar sobre dependências vulneráveis no projeto, fazer linting automatizado (infelizmente com alguns bugs), rastreamento de Issues, Pull Requests e branches abandonados e também minificação de imagem;
  2. Declarações de tipos compartilhadas entre frontend e backend para facilitar o consumo da API e manter o princípio DRY - Don't Repeat Yourself;
  3. Gitignore compartilhado para o projeto inteiro;
  4. Yarn workspace para garantir uma boa integração entre os pacotes e dependências.

O que ficou faltando?

Como já foi entregue, não modificarei a PR, mas adicionarei no meu projeto na branch develop

  • Configurar o plugin ImageMinimizer do webpack para poder trazer um SEO melhor, especialmente para mobile;
  • Utilizar uma store do Redux para modo de edição/ administração;
  • Implementar autenticação apropriada para postar na API: JWT utilizando um algorítmo que seja seguro e OAuth;
  • Implementar no frontend outros métodos CRUD além de leitura, poder editar apenas uma propriedade no cartão utilizando patch, assim como um menu adequado para edição de todas as propriedades com PUT e também um menu de criação de Pokémons que permita escolher a imagem;
  • Remover ítens do DOM conforme acontece o scroll infinito (tá prejudicando muito o SEO, especialmente no mobile);
  • Instalar stylelint, integrar no workflow do eslint e arrumar o workflow;
  • Animações ao carregar os cartões, bem como uma box shadow no hover;
  • Investigar o porquê o TypeScript está ignorando as declarações .d.ts geradas para arquivos Sass;
  • Página adequada de créditos pelos assets;
  • Fazer busca de Pokémons, utilizando Fuzzysort (o algorítmo mais adequado que encontrei para buscar dados em massa;
  • Utilizar uma ferramenta para exportar o JSDoc para HTML ou Markdown;
  • Integrar os testes da API no Jest, assim como trazer testes para o Front;
  • Fazer deploy do front em outro ambiente, que trabalhe bem com Brotli ao invés de gzip (brotli já está configurado e aumenta o SEO);

SEO (sujeito a alterações):

Desktop: Celular:
60 a 80 25 a 35
médio/bom ruim

Nota média/ boa de SEO

wh1t3h47 and others added 30 commits July 28, 2021 06:30
Estrutura inicial e watcher para mudança no Excel
Padronizar codigo para eslint closes #9
Bumps [eslint-plugin-promise](https://github.com/xjamundx/eslint-plugin-promise) from 4.3.1 to 5.1.0.
- [Release notes](https://github.com/xjamundx/eslint-plugin-promise/releases)
- [Changelog](https://github.com/xjamundx/eslint-plugin-promise/blob/development/CHANGELOG.md)
- [Commits](https://github.com/xjamundx/eslint-plugin-promise/commits)

---
updated-dependencies:
- dependency-name: eslint-plugin-promise
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
wh1t3h47 and others added 30 commits October 12, 2021 17:59
…ap-5.1.3

Bump bootstrap from 5.1.0 to 5.1.3
Bumps [clean-webpack-plugin](https://github.com/johnagan/clean-webpack-plugin) from 4.0.0-alpha.0 to 4.0.0.
- [Release notes](https://github.com/johnagan/clean-webpack-plugin/releases)
- [Commits](https://github.com/johnagan/clean-webpack-plugin/commits/v4.0.0)

---
updated-dependencies:
- dependency-name: clean-webpack-plugin
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Bumps [@fortawesome/free-regular-svg-icons](https://github.com/FortAwesome/Font-Awesome) from 5.15.3 to 5.15.4.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](FortAwesome/Font-Awesome@5.15.3...5.15.4)

---
updated-dependencies:
- dependency-name: "@fortawesome/free-regular-svg-icons"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Bumps [localforage](https://github.com/localForage/localForage) from 1.9.0 to 1.10.0.
- [Release notes](https://github.com/localForage/localForage/releases)
- [Changelog](https://github.com/localForage/localForage/blob/master/CHANGELOG.md)
- [Commits](localForage/localForage@1.9.0...1.10.0)

---
updated-dependencies:
- dependency-name: localforage
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
…ome/free-regular-svg-icons-5.15.4

Bump @fortawesome/free-regular-svg-icons from 5.15.3 to 5.15.4
…rage-1.10.0

Bump localforage from 1.9.0 to 1.10.0
Bumps [@babel/register](https://github.com/babel/babel/tree/HEAD/packages/babel-register) from 7.14.5 to 7.15.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.15.3/packages/babel-register)

---
updated-dependencies:
- dependency-name: "@babel/register"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
…ebpack-plugin-4.0.0

Bump clean-webpack-plugin from 4.0.0-alpha.0 to 4.0.0
Bumps [core-js](https://github.com/zloirock/core-js) from 3.16.0 to 3.18.3.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](zloirock/core-js@v3.16.0...v3.18.3)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
…egister-7.15.3

Bump @babel/register from 7.14.5 to 7.15.3
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.33.0 to 5.0.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.0.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
…-3.18.3

Bump core-js from 3.16.0 to 3.18.3
…s/frontend/typescript-eslint/parser-5.0.0

Bump @typescript-eslint/parser from 4.33.0 to 5.0.0 in /packages/frontend
Bumps [pokemon-sprites](https://github.com/PokeAPI/sprites) from `620b6da` to `65a610e`.
- [Release notes](https://github.com/PokeAPI/sprites/releases)
- [Commits](PokeAPI/sprites@620b6da...65a610e)

---
updated-dependencies:
- dependency-name: pokemon-sprites
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
Bumps [@fortawesome/free-brands-svg-icons](https://github.com/FortAwesome/Font-Awesome) from 5.15.3 to 5.15.4.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](FortAwesome/Font-Awesome@5.15.3...5.15.4)

---
updated-dependencies:
- dependency-name: "@fortawesome/free-brands-svg-icons"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
…ome/free-brands-svg-icons-5.15.4

Bump @fortawesome/free-brands-svg-icons from 5.15.3 to 5.15.4
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.33.0 to 5.3.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.3.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.33.0 to 5.3.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.3.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Bumps [validator](https://github.com/validatorjs/validator.js) from 13.6.0 to 13.7.0.
- [Release notes](https://github.com/validatorjs/validator.js/releases)
- [Changelog](https://github.com/validatorjs/validator.js/blob/master/CHANGELOG.md)
- [Commits](validatorjs/validator.js@13.6.0...13.7.0)

---
updated-dependencies:
- dependency-name: validator
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
…or-13.7.0

Bump validator from 13.6.0 to 13.7.0
…s/frontend/typescript-eslint/eslint-plugin-5.3.0

Bump @typescript-eslint/eslint-plugin from 4.33.0 to 5.3.0 in /packages/frontend
…s/backend/typescript-eslint/eslint-plugin-5.3.0

Bump @typescript-eslint/eslint-plugin from 4.33.0 to 5.3.0 in /packages/backend
Bumps [@fortawesome/fontawesome-svg-core](https://github.com/FortAwesome/Font-Awesome) from 1.2.35 to 1.2.36.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/commits)

---
updated-dependencies:
- dependency-name: "@fortawesome/fontawesome-svg-core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Bumps [@pmmmwh/react-refresh-webpack-plugin](https://github.com/pmmmwh/react-refresh-webpack-plugin) from 0.4.3 to 0.5.1.
- [Release notes](https://github.com/pmmmwh/react-refresh-webpack-plugin/releases)
- [Changelog](https://github.com/pmmmwh/react-refresh-webpack-plugin/blob/main/CHANGELOG.md)
- [Commits](pmmmwh/react-refresh-webpack-plugin@v0.4.3...v0.5.1)

---
updated-dependencies:
- dependency-name: "@pmmmwh/react-refresh-webpack-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
…ome/fontawesome-svg-core-1.2.36

Bump @fortawesome/fontawesome-svg-core from 1.2.35 to 1.2.36
…/frontend/imagemin-svgo-10.0.0

Bump imagemin-svgo from 9.0.0 to 10.0.0 in /packages/frontend
…-sprites-65a610e

Bump pokemon-sprites from `620b6da` to `65a610e`
…s/frontend/pmmmwh/react-refresh-webpack-plugin-0.5.1

Bump @pmmmwh/react-refresh-webpack-plugin from 0.4.3 to 0.5.1 in /packages/frontend
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants