Desafio Pokémon


Projeto   |    Entre em contato

💻 Projeto

Projeto desenvolvido para o teste de desenvolvimento web da RedFox, foi dado maior ênfase ao backend, visto que é minha atual área atual no momento.

Como o teste possibilita permite uma flexibilidade sobre a forma na qual o objetivo será atingido, optei por utilizar na modelagem do banco de dados MySQL os seguintes campos: name, pokedex_number, generation, evolution, familyID, type_1, type_2, weather_1, weather_2, stat_total, atk, def, sta, legendary, cp@39, cp@40, os demais campos não formão utilizados.

Os campos que possuíam maior relacionamento entre os pokémons eram type_1 e weather_1, por isso optei por criar na tabela de pokemons os campos type_1, type_2, weather_1 e weather_2 como chaves estrangerias das tabelas types e weather. Sendo que cada Pokémon possuía um types e weather e as tabelas types e weather possuem vários Pokémons.

🚀 Construído com

Este projeto foi desenvolvido com as seguintes tecnologias:

Backend
  • Node.js
  • Express
  • JWT
  • Bcrypt
  • Express-async-errors
  • MySQL
  • Sequelize
  • Dotenv
  • Cors
  • VS Code
Frontend
  • React
  • Material-ui
  • Axios
  • VS Code

Backend

Para executar o projeto, instale as dependências.

# navegue até a pasta de backend
$ cd Backend
# instale as dependências de backend 
$ yarn ou npm install
# Criando tabela no banco de dados
# run migrations
$ yarn sequelize-cli db:migrate
# run api
$ yarn dev

A API possui controle de sessão através de um token JWT, na qual possibilita a divisão das rotas em rotas públicas e privadas. Sendo que as rotas publicação podem ser acessadas sem o token em quanto as privadas não podem ser acessadas sem um token válido.


Rotas públicas

Método Rota Função Campos obrigatórios Descrição
POST /user Cadastra um usuário name, email e password Antes de cadastrada um usuário é verificado se o email informado já foi cadastrado.
PUT /user Atualiza os dados do usuário Se existir oldPassword os campos password e confirPassword passam a ser obrigatórios. Verifica se a senha confere com a salva no banco e se o email informado já não foi cadastrado.
POST /session Faz login na aplicação email e password Verifica se usuário existe e se a senha confere com a salva no banco.

Rotas privadas

Método Rota Função Campos obrigatórios Descrição
POST /types Cadastra um type name Antes de cadastrar o type verifica se o type informado já foi cadastrado.
GET /types/:id Traz um único type Busca os dados de um type pelo seu id e todos os pokémons que possuem aquele type.
GET /types Traz todos os types cadastrados Verifica se existe algum type cadastrados e traz todos os types cadastrados.
PUT /types/:id Atualiza os dados de um type Busca os dados de um type pelo id e verifica se o type informado já foi cadastrado.
POST /weather Cadastrar um weather name Antes de cadastrar o weather verifica se o weather informado já foi cadastrado.
GET /weather/:id Traz um weather em específico Busca os dados de um weather pelo seu id e todos os pokémons que possuem este weather.
GET /weather Traz todos os weather cadastrados Verifica se existe algum weather cadastrado e traz todos os weather cadastrados.
PUT /weather/:id Atualiza os dados de um weather Busca os dados de um weather pelo seu id e verifica se o weather informado já foi cadastrado.
POST /pokemon Cadastra um pokémon name, type_1, weather_1, atk, def, sta, cp39 e cp40 Antes de cadastrada verifica se o pokémon informado já não foi cadastrado.
GET /pokemon Traz todos os pokémons cadastrados Busca todos os pokémons através do filtro de ativos ou inativo e ordena pelo name.
GET /pokemon/:id Traz todos os pokémons cadastrados Verifica se o pokémons existe e traz os dados deste Pokémon.
PUT /pokemon/:id Atualiza os dados de um pokémon Verifica se o pokémons existe e se já não existe outro Pokémon com o mesmo nome antes de atualizar os dados.
DELETE /pokemon/:id Altera o estado do Pokémon para ativo ou inativo Verifica se o Pokémon existe e altera o seu estado.

Frontend

Para executar o projeto, instale as dependências.

# navegue até a pasta de backend
$ cd Fronted
# instale as dependências de fronted
$ yarn ou npm install
# run aplicação 
$ yarn start ou npm start
  • O endereço base da API pode ser modificado no arquivo api.js que se encontra no diretório: src/services

Rotas publicas

Rota Função Descrição
/ Rota inicial para realizar login. Para realizar login é necessário e-mail e senha cadastrados previamente. Ao fazer login a API retorna um token que é usado para validação nas operações no sistema.

Funções:

handleLoginClick: Faz uma requisição à API para criar uma no seção.
handleSignupClick: Redireciona o usuário para criar uma conta.
handleClickOpen: Inicia um Dilog de feedback para o usuário.
handleClose: Fecha o Dilog de feedback.
Rota Função Descrição
/register Rota para realizar o cadastro no sistema. Para criar uma conta é solicitado nome, e-mail e senha.

Funções:

handleRegisterClick: Faz uma requisição à API para criar um usuário.
handleBackClick: Redireciona o usuário de volta para o login.
handleClickOpen: Inicia um Dilog de feedback para o usuário.
handleClose: Fecha o Dilog de feedback.
handleToRedirect: Redireciona o usuário após a conta ser criada.

Rotas privadas

Rota Função Descrição
/app Rota com uma lista dos Pokémons. Rota possui botão de navegação e botão para adicionar um Pokémon.

Funções:

handleGoToAddPokemon: Redireciona o usuário para cadastrar um Pokémon.
handleGoToUpdatePokemon: Redireciona o usuário para atualizar um Pokémon.
handleToNextPage: Faz uma chamada à API para gerar uma nova página da lista de Pokémons.
handleToPrevPage: Faz uma requisição à API para retornar à página anterior da lista.
Rota Função Descrição
/addpokemon Rota para adicionar um Pokémon. Adicionar um Pokémon.

Funções:

handleClickOpen: Inicia um Dilog de feedback para o usuário.
handleClose: Fecha o Dilog de feedback.
handleToRedirect: Redireciona o usuário após criar um Pokémon
handleToAtk: Recebe o valor de ATK e soma no total.
handleToDef: Recebe o valor de DEF e soma no total.
handleToSta: Recebe o valor de STA e soma no total.
handleToGetTypes: Faz uma requisição à API para trazer os Types dos Pokémons.
handleToGetWeathers: Faz uma requisição à API para trazer os Weathers dos Pokémons.
handleToSavePokemon: Envia uma requisição à API para salvar um Pokémon.
Rota Função Descrição
/updatepokemon Rota para atualizar um Pokémon. Pode ser acessada basta clicar no Pokémon desejado na lista.

Funções:

handleClickOpen: Inicia um Dilog de feedback para o usuário.
handleClose: Fecha o Dilog de feedback.
handleToRedirect: Redireciona o usuário após selecionar o Pokémon
handleToAtk: Recebe o valor de ATK e soma no total.
handleToDef: Recebe o valor de DEF e soma no total.
handleToSta: Recebe o valor de STA e soma no total.
handleToGetTypes: Faz uma requisição à API para trazer os Types dos Pokémons.
handleToGetWeathers: Faz uma requisição à API para trazer os Weathers dos Pokémons.
handleToSavePokemon: Envia uma requisição à API para atualizar o Pokémon.
handleToGetPokemon: Busca um Pokémon por id.

##: Entre em contato!

Linkedin - Stefano Saffran     Email - Stefano Saffran

Feito com: ☕ and ❤️ by por Spencer Otoni