Skip to content

Commit e2835b1

Browse files
authored
Add files via upload
1 parent 2376367 commit e2835b1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+3501
-818
lines changed

backend/Dockerfile

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
FROM node:lts-alpine
2+
3+
RUN mkdir -p /home/node/api/node_modules && chown -R node:node /home
4+
5+
WORKDIR /home/node/api
6+
7+
COPY package.json yarn.* ./
8+
9+
USER node
10+
11+
RUN yarn
12+
13+
COPY --chown=node:node . .
14+
15+
EXPOSE 3333
16+
17+
CMD ["yarn", "dev"]

backend/docker-compose.yaml

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
version: '3'
2+
3+
services:
4+
5+
nodejs-barber:
6+
container_name: nodejs-barber
7+
build: '.'
8+
entrypoint: ["./init.sh"]
9+
volumes:
10+
- .:/home/node/api
11+
- /home/node/api/node_modules
12+
depends_on:
13+
- postgres-barber
14+
- mongo-barber
15+
- redis-barber
16+
networks:
17+
- app-connect
18+
ports:
19+
- '3333:3333'
20+
21+
mongo-barber:
22+
container_name: mongo-barber
23+
image: 'mongo'
24+
restart: always
25+
volumes:
26+
- mongo-barber-data:/data
27+
ports:
28+
- '27017:27017'
29+
networks:
30+
- app-connect
31+
32+
postgres-barber:
33+
container_name: postgres-barber
34+
image: postgres:11
35+
restart: always
36+
volumes:
37+
- postgres-barber-data:/data
38+
environment:
39+
POSTGRES_DB: ${DB_NAME}
40+
POSTGRES_USER: ${DB_USER}
41+
POSTGRES_PASSWORD: ${DB_PASS}
42+
networks:
43+
- app-connect
44+
ports:
45+
- '5432:5432'
46+
47+
48+
jobs:
49+
container_name: jobs
50+
build: .
51+
command: yarn queue
52+
depends_on:
53+
- redis-barber
54+
networks:
55+
- app-connect
56+
57+
redis-barber:
58+
container_name: redis-barber
59+
image: bitnami/redis:latest
60+
restart: always
61+
environment:
62+
- ALLOW_EMPTY_PASSWORD=yes
63+
volumes:
64+
- redis-barber-data:/data
65+
networks:
66+
- app-connect
67+
68+
volumes:
69+
postgres-barber-data:
70+
mongo-barber-data:
71+
redis-barber-data:
72+
73+
74+
networks:
75+
app-connect:
76+
driver: bridge

backend/init.sh

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/sh
2+
yarn sequelize db:migrate
3+
yarn dev

backend/nodemon.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"execMap": {
3-
"js":"node -r sucrase/register"
4-
}
2+
"execMap": {
3+
"js": "sucrase-node"
4+
}
55
}

backend/package.json

+28-14
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,43 @@
11
{
2-
"name": "modulo02",
2+
"name": "module02",
33
"version": "1.0.0",
4-
"main": "index.js",
4+
"main": "server.js",
55
"license": "MIT",
66
"scripts": {
7-
"dev": "nodemon src/server.js",
8-
"dev:debug": "nodemon --inspect src/server.js"
7+
"start": "node ./src/server.js",
8+
"dev": "nodemon -L ./src/server.js",
9+
"queue": "nodemon ./src/queue.js"
910
},
1011
"dependencies": {
12+
"@sentry/node": "5.6.2",
1113
"bcryptjs": "^2.4.3",
12-
"date-fns": "^2.9.0",
14+
"bee-queue": "^1.2.2",
15+
"cors": "^2.8.5",
16+
"date-fns": "^2.0.0-beta.5",
17+
"dotenv": "^8.1.0",
1318
"express": "^4.17.1",
19+
"express-async-errors": "^3.1.1",
20+
"express-handlebars": "^3.1.0",
1421
"jsonwebtoken": "^8.5.1",
15-
"mongoose": "^5.9.1",
22+
"mongoose": "^5.6.10",
1623
"multer": "^1.4.2",
17-
"nodemailer": "^6.4.3",
18-
"pg": "^7.18.1",
24+
"nodemailer": "^6.3.0",
25+
"nodemailer-express-handlebars": "^3.1.0",
26+
"pg": "^7.11.0",
1927
"pg-hstore": "^2.3.3",
20-
"sequelize": "^5.21.3",
21-
"yup": "^0.28.1"
28+
"sequelize": "^5.8.7",
29+
"youch": "^2.0.10",
30+
"yup": "^0.27.0"
2231
},
2332
"devDependencies": {
24-
"nodemon": "^2.0.2",
25-
"prettier": "^1.19.1",
26-
"sequelize-cli": "^5.5.1",
27-
"sucrase": "^3.12.1"
33+
"eslint": "^6.8.0",
34+
"eslint-config-airbnb-base": "^14.0.0",
35+
"eslint-config-prettier": "^4.3.0",
36+
"eslint-plugin-import": "^2.19.1",
37+
"eslint-plugin-prettier": "^3.1.0",
38+
"nodemon": "^1.19.1",
39+
"prettier": "^1.17.1",
40+
"sequelize-cli": "^5.4.0",
41+
"sucrase": "^3.10.1"
2842
}
2943
}

backend/src/app.js

+41-17
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,50 @@
1+
import 'dotenv/config';
2+
13
import express from 'express';
24
import path from 'path';
3-
import routes from './router';
4-
5+
import cors from 'cors';
6+
import Youch from 'youch';
7+
import * as Sentry from '@sentry/node';
8+
import 'express-async-errors';
9+
import routes from './routes';
10+
import sentryConfig from './config/sentry';
511
import './database';
612

7-
813
class App {
14+
constructor() {
15+
this.server = express();
916

10-
constructor() {
11-
this.server = express();
17+
Sentry.init(sentryConfig);
18+
this.middlewares();
19+
this.routes();
20+
this.exceptionHandler();
21+
}
1222

13-
this.middlewares();
14-
this.routes();
15-
}
16-
middlewares() {
17-
this.server.use(express.json());
18-
this.server.use('/files', express.static(path.resolve(__dirname, '..','temp', 'upload'))
19-
);
23+
middlewares() {
24+
this.server.use(Sentry.Handlers.errorHandler());
25+
// cors({origin: 'http://google.com'}) delimitar frontend
26+
this.server.use(cors());
27+
this.server.use(express.json());
28+
this.server.use(
29+
'/files',
30+
express.static(path.resolve(__dirname, '..', 'tmp', 'uploads'))
31+
);
32+
}
2033

21-
}
22-
routes() {
23-
this.server.use(routes)
24-
}
34+
routes() {
35+
this.server.use(routes);
36+
this.server.use(Sentry.Handlers.errorHandler());
37+
}
38+
39+
exceptionHandler() {
40+
this.server.use(async (err, req, res, next) => {
41+
if (process.env.NODE_ENV === 'development') {
42+
const errors = await new Youch(err, req).toJSON();
43+
return res.status(500).json(errors);
44+
}
45+
return res.status(500).json({ error: 'Internal server error' });
46+
});
47+
}
2548
}
26-
export default new App().server
49+
50+
export default new App().server;

0 commit comments

Comments
 (0)