Skip to content

Commit

Permalink
Added db decorator and migration in docker deployment
Browse files Browse the repository at this point in the history
  • Loading branch information
taesup committed Mar 19, 2019
1 parent 2160061 commit e47b7ce
Show file tree
Hide file tree
Showing 9 changed files with 121 additions and 29 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,4 @@ COPY . .
EXPOSE 8080

# Start the Express server
CMD ["node", "./server/server.js"]
CMD ["node", "./deploy-prod.js"]
47 changes: 47 additions & 0 deletions deploy-dev.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
const nodemon = require('nodemon');
const knex = require('./server/database/knex');

const DELAY = 3000;

function testConnection() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('Polling for DB Connection...');
knex.migrate.latest()
.then(resolve)
.catch((err) => {
console.log(err);
resolve(testConnection());
});
}, DELAY);
})
}

// migrate db
testConnection()
// run seeds
.then(() => { knex.seed.run(); })
// print status
.then(() => {
console.log('Migration and Seeds Finished');
})
// run server using nodemon
.then(() => {
nodemon({
script: './server/server.js',
ext: 'js json'
});

nodemon.on('start', function () {
console.log('App has started');
}).on('quit', function () {
console.log('App has quit');
process.exit();
}).on('restart', function (files) {
console.log('App restarted due to: ', files);
});
})
.catch((err) => {
console.log(err);
process.exit(1);
});
31 changes: 31 additions & 0 deletions deploy-prod.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
const knex = require('./server/database/knex');

const DELAY = 3000;

function testConnection() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('Polling for DB Connection...');
knex.migrate.latest()
.then(resolve)
.catch(() => { resolve(testConnection()); });
}, DELAY);
})
}

// migrate db
testConnection()
// run seeds
.then(() => { knex.seed.run(); })
// print status
.then(() => {
console.log('Migration and Seeds Finished');
})
// run server
.then(() => {
require('./server/server');
})
.catch((err) => {
console.log(err);
process.exit(1);
});
2 changes: 1 addition & 1 deletion docker-compose.override.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ services:
image: ${DOCKERHUB_NAME}/${IMAGE_NAME}:${IMAGE_VERSION}
depends_on:
- postgres-primary-db
command: ["npm", "run", "dev"]
command: ["node", "deploy-dev.js"]
container_name: ${IMAGE_NAME}
volumes:
- ".:/src/app"
Expand Down
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
"react-scripts": "2.1.2"
},
"scripts": {
"dev": "./node_modules/nodemon/bin/nodemon.js ./server/server.js",
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
Expand Down
6 changes: 6 additions & 0 deletions server/database/decorator.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const User = require('./models/User');

module.exports = function(req, res, next) {
req.database = { User };
next();
}
4 changes: 2 additions & 2 deletions server/knexfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ module.exports = {
},
migrations: {
tableName: 'knex_migrations',
directory: './database/migrations'
directory: './server/database/migrations'
},
seeds: {
directory: './database/seeds'
directory: './server/database/seeds'
}
};
27 changes: 27 additions & 0 deletions server/routes/users/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
const express = require('express');
const router = express.Router();

router.route('/users')
.get((req, res) => {
return new req.database.User().fetchAll()
.then((users) => {
return res.json(users);
})
.catch((err) => {
console.log(err);
res.sendStatus(500);
});
})
.post((req, res) => {
const username = req.body.username;
return new req.database.User({ username }).save()
.then((user) => {
return res.json({ success: true });
})
.catch((err) => {
console.log(err);
res.sendStatus(500);
});
});

module.exports = router;
30 changes: 6 additions & 24 deletions server/server.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const express = require('express');
const bodyParser = require('body-parser');
const User = require('./database/models/User');
const userRoutes = require('./routes/users');
const decorator = require('./database/decorator');

// data vars
const PORT = process.env.PORT;
Expand All @@ -16,34 +17,15 @@ if (!PORT || !SESSION_SECRET || !REDIS_HOSTNAME) { return process.exit(1); }
const app = express();
app.use(bodyParser.json({ extended: true }));

// decorate request with database
app.use(decorator);

// routes
app.use('/api', userRoutes);
app.get('/api/smoke', (req, res) => {
res.json({ smoke: 'test' });
});

app.get('/api/users', (req, res) => {
return new User().fetchAll()
.then((users) => {
return res.json(users);
})
.catch((err) => {
console.log(err);
res.sendStatus(500);
});
});

app.post('/api/users', (req, res) => {
const username = req.body.username;
return new User({ username }).save()
.then((user) => {
return res.json({ success: true });
})
.catch((err) => {
console.log(err);
res.sendStatus(500);
});
})

// start server
app.listen(PORT, () => {
console.log(`Server stated on port: ${PORT}`);
Expand Down

0 comments on commit e47b7ce

Please sign in to comment.