Skip to content

Commit dfe67bd

Browse files
committed
Sets up babel
- Adds babel setup - Moves app.js to server folder - Moves bin folder to server folder
1 parent e2c5257 commit dfe67bd

40 files changed

+481
-441
lines changed

.babelrc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"presets": [
3+
["@babel/preset-env", {
4+
"useBuiltIns": "usage",
5+
"corejs": 3,
6+
}]
7+
],
8+
"plugins": ["@babel/plugin-transform-runtime"]
9+
}

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ package-lock.json
44
.env
55
.nyc_output
66
coverage
7-
.DS_Store
7+
.DS_Store
8+
build

package.json

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
"name": "postgres-express-node",
33
"version": "1.0.0",
44
"description": "Setting up a todo list backend",
5-
"main": "index.js",
5+
"main": "build/bin/www",
66
"scripts": {
7-
"start": "node ./bin/www",
8-
"start:dev": "nodemon ./bin/www",
9-
"test": "NODE_ENV=test npm run reset:db && NODE_ENV=test nyc mocha --timeout 5000 server/tests/**/*.spec.js",
7+
"start": "node build/bin/www",
8+
"start:dev": "nodemon --exec babel-node -- server/bin/www",
9+
"build": "rm -rf build && babel server -d build --copy-files",
10+
"test": "NODE_ENV=test npm run reset:db && NODE_ENV=test nyc mocha --require @babel/register --timeout 5000 server/tests/**/*.spec.js",
1011
"migrate": "sequelize db:migrate",
1112
"reset:db": "sequelize db:migrate:undo:all && npm run migrate",
1213
"coveralls-coverage": "nyc report --reporter=text-lcov | coveralls",
@@ -23,6 +24,7 @@
2324
"**/*.spec.js",
2425
"coverage",
2526
"dist",
27+
"build",
2628
"server/tests",
2729
"server/migrations",
2830
".eslintrc.js"
@@ -37,9 +39,11 @@
3739
"author": "Ryan Wire",
3840
"license": "ISC",
3941
"dependencies": {
42+
"@babel/runtime": "^7.5.5",
4043
"bcrypt": "^3.0.6",
4144
"body-parser": "^1.19.0",
4245
"celebrate": "^10.0.1",
46+
"core-js": "^3.2.1",
4347
"cors": "^2.8.5",
4448
"dotenv": "^8.0.0",
4549
"express": "^4.17.1",
@@ -52,6 +56,12 @@
5256
"sequelize": "^5.8.9"
5357
},
5458
"devDependencies": {
59+
"@babel/cli": "^7.5.5",
60+
"@babel/core": "^7.5.5",
61+
"@babel/node": "^7.5.5",
62+
"@babel/plugin-transform-runtime": "^7.5.5",
63+
"@babel/preset-env": "^7.5.5",
64+
"@babel/register": "^7.5.5",
5565
"chai": "^4.2.0",
5666
"chai-http": "^4.3.0",
5767
"coveralls": "^3.0.6",

app.js renamed to server/app.js

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
const express = require('express');
2-
const cors = require('cors');
3-
const logger = require('morgan');
4-
const bodyParser = require('body-parser');
5-
const passport = require('passport');
6-
require('dotenv').config();
7-
const joiErrors = require('./server/middlewares/joiErrors');
1+
import express from 'express';
2+
import cors from 'cors';
3+
import logger from 'morgan';
4+
import bodyParser from 'body-parser';
5+
import passport from 'passport';
6+
import dotenv from 'dotenv';
7+
import joiErrors from './middlewares/joiErrors';
88

99
// Require our routes and passport into the application
10-
const todosRouter = require('./server/routes').todosRouter();
11-
const authRouter = require('./server/routes').authRouter();
12-
const usersRouter = require('./server/routes').usersRouter();
13-
const { passportAuth } = require('./server/config/passport');
10+
import routers from './routes';
11+
import passportAuth from './config/passport';
1412

13+
dotenv.config();
1514
passportAuth(passport);
1615

1716
const apiPrefix = '/api';
@@ -33,9 +32,9 @@ app.use(bodyParser.json());
3332
app.use(bodyParser.urlencoded({ extended: false }));
3433

3534
app.use(apiPrefix, passport.authenticate('jwt', { session: false }));
36-
app.use(apiPrefix, usersRouter);
37-
app.use(apiPrefix, todosRouter);
38-
app.use(authRouter);
35+
app.use(apiPrefix, routers.usersRouter());
36+
app.use(apiPrefix, routers.todosRouter());
37+
app.use(routers.authRouter());
3938

4039
app.use(joiErrors);
4140

File renamed without changes.

server/config/passport.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
const passportJWT = require('passport-jwt');
2-
const { User } = require('../models');
1+
import passportJWT from 'passport-jwt';
2+
import db from '../models';
33

44
const { ExtractJwt } = passportJWT;
55
const JwtStrategy = passportJWT.Strategy;
@@ -9,7 +9,7 @@ jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
99
jwtOptions.secretOrKey = process.env.SECRET_KEY;
1010

1111
const passportAuth = (passport) => {
12-
const getUser = async (username) => User.findOne({
12+
const getUser = async (username) => db.User.findOne({
1313
attributes: ['id', 'username', 'createdAt', 'updatedAt'],
1414
where: {
1515
username,
@@ -27,6 +27,4 @@ const passportAuth = (passport) => {
2727
passport.use(strategy);
2828
};
2929

30-
module.exports = {
31-
passportAuth,
32-
};
30+
export default passportAuth;

server/controllers/index.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
const todos = require('./todos');
2-
const todoItems = require('./todoitems');
3-
const users = require('./users');
1+
import todos from './todos';
2+
import todoItems from './todoitems';
3+
import users from './users';
44

5-
module.exports = {
5+
const controllers = {
66
todos,
77
todoItems,
88
users,
99
};
10+
11+
export default controllers;

server/controllers/todoitems.js

Lines changed: 47 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,54 @@
1-
const { TodoItem } = require('../models');
1+
import db from '../models';
22

3-
module.exports = {
4-
async createTodoItem(req, res) {
5-
const todoItem = await TodoItem.create({
6-
content: req.body.content,
3+
const createTodoItem = async (req, res) => {
4+
const todoItem = await db.TodoItem.create({
5+
content: req.body.content,
6+
todoId: req.params.todoId,
7+
});
8+
return res.status(201).send(todoItem);
9+
};
10+
11+
const update = async (req, res) => {
12+
const todoItem = await db.TodoItem.findOne({
13+
attributes: ['id', 'todoId', 'content', 'complete', 'updatedAt'],
14+
where: {
15+
id: req.params.todoItemId,
716
todoId: req.params.todoId,
8-
});
9-
return res.status(201).send(todoItem);
10-
},
11-
async update(req, res) {
12-
const todoItem = await TodoItem.findOne({
13-
attributes: ['id', 'todoId', 'content', 'complete', 'updatedAt'],
14-
where: {
15-
id: req.params.todoItemId,
16-
todoId: req.params.todoId,
17-
},
18-
});
17+
},
18+
});
1919

20-
if (!todoItem) {
21-
return res.status(404).send({
22-
message: 'TodoItem Not Found',
23-
});
24-
}
25-
const updatedTodoItem = await todoItem.update({
26-
content: req.body.content || todoItem.content,
27-
complete: req.body.complete || todoItem.complete,
20+
if (!todoItem) {
21+
return res.status(404).send({
22+
message: 'TodoItem Not Found',
2823
});
29-
return res.status(200).send(updatedTodoItem);
30-
},
31-
async destroy(req, res) {
32-
const todoItem = await TodoItem.findOne({
33-
attributes: ['id'],
34-
where: {
35-
id: req.params.todoItemId,
36-
todoId: req.params.todoId,
37-
},
24+
}
25+
const updatedTodoItem = await todoItem.update({
26+
content: req.body.content || todoItem.content,
27+
complete: req.body.complete || todoItem.complete,
28+
});
29+
return res.status(200).send(updatedTodoItem);
30+
};
31+
32+
const destroy = async (req, res) => {
33+
const todoItem = await db.TodoItem.findOne({
34+
attributes: ['id'],
35+
where: {
36+
id: req.params.todoItemId,
37+
todoId: req.params.todoId,
38+
},
39+
});
40+
41+
if (!todoItem) {
42+
return res.status(404).send({
43+
message: 'TodoItem Not Found',
3844
});
45+
}
46+
await todoItem.destroy();
47+
return res.sendStatus(204);
48+
};
3949

40-
if (!todoItem) {
41-
return res.status(404).send({
42-
message: 'TodoItem Not Found',
43-
});
44-
}
45-
await todoItem.destroy();
46-
return res.sendStatus(204);
47-
},
50+
export default {
51+
createTodoItem,
52+
update,
53+
destroy,
4854
};

server/controllers/todos.js

Lines changed: 62 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,63 @@
1-
const { Todo } = require('../models');
2-
const { TodoItem } = require('../models');
3-
4-
module.exports = {
5-
async createTodo(req, res) {
6-
const { body, user } = req;
7-
const createdTodo = await Todo.create({
8-
title: body.title,
9-
UserId: user.id,
10-
});
11-
return res.status(201).send(createdTodo);
12-
},
13-
14-
async list(req, res) {
15-
const { limit, page, offset } = req.query;
16-
17-
const todos = await Todo.findAndCountAll({
18-
limit,
19-
offset,
20-
where: { UserId: req.user.id },
21-
include: [
22-
{
23-
model: TodoItem,
24-
attributes: ['id', 'complete', 'content', 'todoId', 'createdAt', 'updatedAt'],
25-
as: 'todoItems',
26-
},
27-
],
28-
order: [
29-
['createdAt', 'DESC'],
30-
[{ model: TodoItem, as: 'todoItems' }, 'createdAt', 'ASC'],
31-
],
32-
});
33-
34-
const meta = {
35-
total: todos.count,
36-
pageCount: Math.ceil(todos.count / limit),
37-
perPage: limit,
38-
page,
39-
};
40-
return res.status(200).send({ meta, data: todos.rows });
41-
},
42-
43-
retrieve(req, res) {
44-
return res.status(200).send(req.todo);
45-
},
46-
47-
async update(req, res) {
48-
const { todo, body } = req;
49-
const updatedTodo = await todo.update({
50-
title: body.title,
51-
});
52-
return res.status(200).send(updatedTodo);
53-
},
54-
55-
async destroy(req, res) {
56-
const { todo } = req;
57-
await todo.destroy();
58-
return res.sendStatus(204);
59-
},
1+
import db from '../models';
2+
3+
const createTodo = async (req, res) => {
4+
const { body, user } = req;
5+
const createdTodo = await db.Todo.create({
6+
title: body.title,
7+
UserId: user.id,
8+
});
9+
return res.status(201).send(createdTodo);
10+
};
11+
12+
const list = async (req, res) => {
13+
const { limit, page, offset } = req.query;
14+
15+
const todos = await db.Todo.findAndCountAll({
16+
limit,
17+
offset,
18+
where: { UserId: req.user.id },
19+
include: [
20+
{
21+
model: db.TodoItem,
22+
attributes: ['id', 'complete', 'content', 'todoId', 'createdAt', 'updatedAt'],
23+
as: 'todoItems',
24+
},
25+
],
26+
order: [
27+
['createdAt', 'DESC'],
28+
[{ model: db.TodoItem, as: 'todoItems' }, 'createdAt', 'ASC'],
29+
],
30+
});
31+
32+
const meta = {
33+
total: todos.count,
34+
pageCount: Math.ceil(todos.count / limit),
35+
perPage: limit,
36+
page,
37+
};
38+
return res.status(200).send({ meta, data: todos.rows });
39+
};
40+
41+
const retrieve = (req, res) => res.status(200).send(req.todo);
42+
43+
const update = async (req, res) => {
44+
const { todo, body } = req;
45+
const updatedTodo = await todo.update({
46+
title: body.title,
47+
});
48+
return res.status(200).send(updatedTodo);
49+
};
50+
51+
const destroy = async (req, res) => {
52+
const { todo } = req;
53+
await todo.destroy();
54+
return res.sendStatus(204);
55+
};
56+
57+
export default {
58+
createTodo,
59+
list,
60+
retrieve,
61+
update,
62+
destroy,
6063
};

0 commit comments

Comments
 (0)