Projeto em NodeJs, utilizando arquivos separados para organizar melhor o código Todos os títulos abaixo possuem um commit
- Executar os comandos
yarn init -y
yarn add express
- Criar pasta e arquivos:
src
- app.js
- routes.js
- server.js
- Para executar:
node src/server.js
No browser:
http://localhost:3333
- Executar os comandos
yarn add sucrase nodemon -D
- Alterar a maneira do import
const routes = require('./routes');
se torna
import routes from './routes';
- Depois de editar os arquivos
Para executar:
yarn dev
- Baixar e configurar imagem do BD
docker run --name database -e POSTGRES_PASSWORD=docker -p 5432:5432 -d postgress
Sempre que quiser iniciar a serviço
docker start database
ORM
- Abstração do bd
- Tabelas viram models
SQL
INSERT INTO users (name, email)
VALUES ('Roberto', 'jrggroberto@gmail.com');
SELECT * FROM users WHERE email = 'jrggroberto@gmail.com' LIMIT 1;
JavaScript
User.create({
name: 'Roberto',
email: 'jrggroberto@gmail.com',
});
User.findOne({
where: {
email: 'jrggroberto@gmail.com'
}
});
- Controle de versão para BD
yarn add eslint -D
yarn eslint --init
Choose this options: ? How would you like to use ESLint? To check syntax, find problems, and enforce code style
? What type of modules does your project use? JavaScript modules (import/export)
? Which framework does your project use? None of these
? Does your project use TypeScript? No
? Where does your code run? Node
? How would you like to define a style for your project? Use a popular style guide
? Which style guide do you want to follow? Airbnb (https://github.com/airbnb/javascript)
? What format do you want your config file to be in? JavaScript
Apagar o arquivo package-lock.json e executar o yarn para resolver as dependencias, pois o primeiro arquivo estava para reolver por npm
yarn
Instalar e configurar
yarn add prettier eslint-config-prettier eslint-plugin-prettier -D
yarn eslint --fix src --ext .js
Criar a estrutura de pastas dentro de src
src
- app
- controllers
- models
- config
- database.js
- database
- migrations
yarn add sequelize
yarn add squelize-cli -D
yarn add pg pg-hstore
yarn sequelize migrations:create --name=create-users
Testar e verficar no BD
yarn sequelize db:migrate
yarn sequelize db:migrate:undo
Instalar a extensão bcryptjs
yarn add bcryptjs
Alterar o model/User.js
Para testar enviar
POST http://localhost:3333/users
{
"name": "Roberto",
"email": "jrobert@xpto.com.br",
"password": "123456"
}
Instalar a extensão JSONWebToken
yarn add jsonwebtoken
Criar arquivo app/controllers/SessionController.js
Adicionar function checkPassword em /src/app/models/User.js
Para gerar um hash do /src/config/auth.js
[Md5Online.org]](https://www.md5online.org/)
Para testar enviar
POST http://localhost:3333/sessions
{
"email": "jrobert@xpto.com.br",
"password": "123456"
}
Para testar enviar
UPDATE http://localhost:3333/users
No HEADER passar
req.headers.authorization = bearer + token
{
"email": "jrobert@xpto.com.br",
"password": "123456"
}
O update sempre o email e opicionais para serem alterado para trocar o password é necessário passar o OldPassword
Para testar enviar
UPDATE http://localhost:3333/users
No HEADER passar
req.headers.authorization = bearer + token
{
"name": "Roberto 7",
"email": "jroberttt@xpto.com.br7",
"oldPassword":"123454",
"password": "1234541"
}
A validação é utilizada no inicio de sessão, e nos controles do usuário
Instalar a biblioteca Yup, ela realiza o schema validation
yarn add yup
Yup não possui export default, então a importação não tem como ser
import yup from 'yup';
e sim
import * from Yup from 'yup';
Para guardar arquivos e resolver diretórios (Win/UNIX)
Instalar a biblioteca
yarn add multer
Adicionado a rota files em src/routes.js Acicionaod o arquivo src/config/multerjs
Para testar : Depois de criar uma sessão, copiar o token
POST http://localhost:3333/files Multipart file : arquivo Autentication: Bearer : token
O arquivo será copiado para tmp/uploads
- Migration File
- Migration avatar-field-to-user
Lista todos os prestadores de serviço junto com informação do avatar INDEX / GET
ProviderController.js app.js add this to middlewares() { this.server.use(express.json()); this.server.use( '/files', express.static(path.resolve(__dirname, '..', 'tmp', 'uploads')) ); } To show image in browser
GET http://localhost:3333/providers Autentication: Bearer : token
- yarn sequelize migration:create --name=create-appointments modified: src/database/index.js Criados
- src/app/models/Appointment.js
- src/database/migrations/20190926190352-create-appointments.js
POST http://localhost:3333/appointments Autentication: Bearer : token de um user não provider
JSON { "provider_id: 2, onde 2 é um id de um provider "date": "2019-09-26 18:00:00" }
Instalar a biblioteca para trabalhar com datas
yarn add date-fns@next
Criar GET /appointments
routes.get('/appointments', AppointmentController.index);
Alterar o a requisição add as informações a baixo na aba Query
page 1
E alterar AppointmentController.js
Adicionar a rota schedule
E passar a query da data
Instalando uma imagem:
docker run --name mongobarber -p 27017:27017 -d -t mongo
Para testar: ir no browser acessar:
localhost:27017
Deve aparecer uma mensagem:
It looks lik you trying to access MongoDB over HTTP on the native driver port.
Para a aplicação poder se conectar ao MongoDB, é necessário instlar:
yarn add mongoose
Como a conexão sugerida estava depreciada, tive que adicionar useUnifiedTopology: true, no parametro de conexão
Instalar o MongoDB Compass Community para verifiar os dados
A parte do banco MongoDB fica em src/shemas/Notification.js
rota Index /notifications
Criar a rota
{{ base_url }}/notifications/
Add rota :
/appointments/:id', AppointmentController.delete
Quando houver um cancelamento, o provider receberar um e-mail
Add biblioteca
```
yarn add nodemailer
´´´
Necessário usar um serviço de e-mail:
- Amazon SES
- Mailgun
- Sparkpost
- Mandril (Mailchimp)
- GMail
- Mailtrap (apenas em DEV) mailtrap.io
Arquivos e pastas criadas
.
├── src
│ ├── config
│ │ └── mail.js
│ └── lib
│ └── Mail.js
.
Adicionar as bibliotecas:
yarn add express-handlebars nodemailer-express-handlebars
Arquivos e pastas criadas
.
src
├── views
│ └── emails
│ ├── layouts
│ │ └── default.hbs
│ ├── partials
│ │ └── footer.hbs
│ └── emails
.
change file: src/app/controllers/AppointmentController.js
O envio de email faz demorar a resposta, com isso será implementado uma funcionalidade background para gerir isto.
Add Docker image Redis - BD altamente performático
docker run --name redisbarber -p 6379:6379 -d -t redis:alpine
Instalar o Bee-Queue - Gerenciador de filas https://github.com/bee-queue/bee-queue
yard add bee-queue
Arquivos e pastas criadas
.
src
├── app
│ └── jobs
│ └── CancellationMail.js
├── config
│ └── redis.js
├── lib
│ └── Queue.js
├── queue.js <==
.
O arquivo queue.js <== irá rodar de maneira independente. Para isso, no package.json adicionar no script
"queue": "nodemon src/queue.js"
Para executar
yarn queue
Imprime no console.log mensagem de erro quando ocorre erro na fila.
Nova rota server/providers/:providerId/available Passando o token E na Query date e resultado de new Date().getTime() ex. 1570455291115
Name | Value |
---|---|
date | 1570455291115 |
Listar as seguintes informações:
- Se é possível cancelar um agendamento
- Se o agendamento já passou
Ferramentas de monitoração de erros https://sentry.io > dá para integrar com Slack, Git para criar insues, bom para trabalhar em produção https://www.bugsnag.com/
yarn add @sentry/node@5.6.2
yarn add express-async-errors
Para melhor tratar os erros:
yarn add youch
Criar o arquivo .env na raiz do projeto
yarn add dotenv