- Migration a DB SQL.
- Criação de Models.
- Criação de Controllers (POST / PUT / GET / DELETE).
- Gerando Hash de senha.
- Autenticação/Middleware de sessão JWT.
- Validação de dados de cadastro via schema YUP.
- docker start database3
- yarn dev
- Iniciar Insomnia
- Iniciar Postbird (Port: 5434)
Esse desafio faz parte do Desafio Final, que é uma aplicação completa (Back-end, Front-end e Mobile) que é avaliada para emissão do Certificado do Bootcamp GoStack, por isso é fundamental que ele seja feito com muito empenho!
“Não espere para plantar, apenas tenha paciência para colher”!
Sobre o desafio | Entrega | Licença
A aplicação que iremos dar início ao desenvolvimento a partir de agora é um app para uma transportadora fictícia, o FastFeet.
Nesse primeiro desafio vamos criar algumas funcionalidades básicas que aprendemos ao longo das aulas até aqui. Esse projeto será desenvolvido aos poucos até o fim da sua jornada onde você terá uma aplicação completa envolvendo back-end, front-end e mobile, que será utilizada para a certificação do bootcamp, então, bora pro código!
Você deverá criar a aplicação do zero utilizando o Express, além de precisar configurar as seguintes ferramentas:
- Sucrase + Nodemon;
- ESLint + Prettier + EditorConfig;
- Sequelize (Utilize PostgreSQL ou MySQL);
Abaixo estão descritas as funcionalidades que você deve adicionar em sua aplicação.
Permita que um usuário se autentique em sua aplicação utilizando e-mail e uma senha.
Crie um usuário administrador utilizando a funcionalidade de seeds do sequelize, essa funcionalidade serve para criarmos registros na base de dados de forma automatizada.
Para criar um seed utilize o comando:
yarn sequelize seed:generate --name admin-user
No arquivo gerado na pasta src/database/seeds
adicione o código referente à criação de um usuário administrador:
const bcrypt = require("bcryptjs");
module.exports = {
up: QueryInterface => {
return QueryInterface.bulkInsert(
"users",
[
{
name: "Distribuidora FastFeet",
email: "[email protected]",
password_hash: bcrypt.hashSync("123456", 8),
created_at: new Date(),
updated_at: new Date()
}
],
{}
);
},
down: () => {}
};
Agora execute:
yarn sequelize db:seed:all
Agora você tem um usuário na sua base de dados, utilize esse usuário para todos os logins que você fizer.
- A autenticação deve ser feita utilizando JWT.
- Realize a validação dos dados de entrada;
Você agora precisa permitir que destinatários sejam mantidos (cadastrados/atualizados) na aplicação, e esses devem ter o nome do destinatário e campos de endereço: rua, número, complemento, estado, cidade e CEP.
Utilize uma nova tabela no banco de dados chamada recipients
para guardar informações do destinatário.
O cadastro de destinatários só pode ser feito por administradores autenticados na aplicação.
O destinatário não pode se autenticar no sistema, ou seja, não possui senha.
Esse desafio não precisa ser entregue e não receberá correção. Além disso, o código fonte não está disponível por fazer parte do desafio final, que será corrigido para certificação do bootcamp. Após concluir o desafio, adicionar esse código ao seu Github é uma boa forma de demonstrar seus conhecimentos para oportunidades futuras.
Esse projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Feito com ♥ by Rocketseat 👋 Entre na nossa comunidade!
-
Iniciando o projeto.
- Criar src/app.js
- Configurar express server e adicionar atualização automática:
yarn add express yarn add nodemon -D
- Criar server.js e routes.js
-
Nodemon & Sucrase
- Para utilizar a nova sintaxe do JS dentro do NodeJS:
- Atualizar package.json, launch.json
- Criar nodemon.json
yarn add sucrase -D
-
Conceitos do Docker
- Instalar Docker para a criação de containers (para DB, notifications e envio de e-mails).
- Criar um serviço do docker em Postgres
- https://hub.docker.com/_/postgres
- Terminal:
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5433:5432 -d postgres
- Containers em execução: docker ps
- Todos os Containers: docker ps -a
- Download Postbird: https://electronjs.org/apps/postbird
- Create Database: Fastfeet
-
Sequelize & MVC
- Sequelize: ORM NodeJS para DB's relacionais (MySQL, Postgres, SQLite).
- Tabelas viram models.
- Migrations: Cada arquivo contém instruções para criação, alteração ou remoção de tabelas ou colunas.
- Seeds: População de DB para desenvolvimento.
- Sequelize: ORM NodeJS para DB's relacionais (MySQL, Postgres, SQLite).
-
ESLint, Prettier & EditorConfig
- ESLint: "linting" do código (uso do padrão AirBNB).
yarn add eslint -D yarn eslint --init
- Delete package-lock.json, yarn.
- Instalar extensão eslint no VSCode, alterar settings.json, .eslintrc.js.
- Prettier: Formatação de código.
yarn add prettier eslint-config-prettier eslint-plugin-prettier -D
- alterar .eslintrc.js, criar .prettierrc e EditorConfig.
- ESLint: "linting" do código (uso do padrão AirBNB).
-
Configurando Sequelize
- Criar src/config/database.js, src/database/migrations, app/controllers, app/models.
yarn add sequelize yarn add sequelize-cli -D yarn add pg pg-hstore
- Criar .sequelizerc e alterar database.js
- Criar src/config/database.js, src/database/migrations, app/controllers, app/models.
-
Migration
- Criar tabelas, migrate, undo, undo all
yarn sequelize migration:create --name=create-users yarn sequelize db:migrate yarn sequelize db:migrate:undo yarn sequelize db:migrate:undo:all
- Criar Seeds:
yarn sequelize seed:generate --name admin-user yarn sequelize db:seed:all
- Criar tabelas, migrate, undo, undo all
-
Models
-
Loader de models
- Criar database/index.js, alterar app.js, routes.js
-
Cadastro de usuários
- Criar controllers/UserController.js, alterar routes.js
- Insomnia: Criar Workspace: Fastfeet, pasta: Users, Request: POST
-
Gerando Hash de senha
- Gerar Hash e criptografar a senha
yarn add bcryptjs
- Alterar models/User.js
- Gerar Hash e criptografar a senha
-
Autenticação JWT
- Criar SessionController.js
- Instalar o gerador de token JWT.
yarn add jsonwebtoken
- Criar o método checkPassword() no model User.js
- Gerar Hash aleatório: https://www.md5online.org/
- Criar config/auth.js, alterar User.js, SessionController.js, Routes.js
-
Middleware de autenticação
- Bloquear User ao acessar algum tipo de rota se ele ainda não estiver logado.
- Criar método update no UserController.js.
- Criar app/middlewares/auth.js.
- Criar middleware global em routes.js
-
Update de usuário
-
Validando dados de entrada
- Biblioteca yup: schema validation - forma simples de definir os campos presentes no campo da req e passa através de funções o tipo daquele campo. Ex: é uma string, obrigatório, no mínimo 6 letras.
- Add Yup
yarn add yup
- UserController.js
- Criar métodos Store e Update.
- SessionController.js
- Criar método Store.