diff --git a/package.json b/package.json index 8189057..8519c08 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "passport-google-oauth20": "^2.0.0", "passport-local": "^1.0.0", "pg": "^7.8.0", + "pg-hstore": "^2.3.3", "plex-api": "^5.2.1", "request": "^2.88.0", "request-promise": "^4.2.4", diff --git a/server/db/config/config.json b/server/db/config/config.json index 013a743..697dabd 100644 --- a/server/db/config/config.json +++ b/server/db/config/config.json @@ -5,7 +5,6 @@ "database": "recommend_development", "host": "127.0.0.1", "dialect": "postgres", - "operatorsAliases": false, "logging": false }, "test": { @@ -14,7 +13,6 @@ "database": "recommend_test", "host": "127.0.0.1", "dialect": "postgres", - "operatorsAliases": false, "logging": false }, "production": { diff --git a/server/db/models/index.js b/server/db/models/index.js index 7067ebd..c1a3d6d 100644 --- a/server/db/models/index.js +++ b/server/db/models/index.js @@ -1,51 +1,37 @@ -import fs from 'fs'; -import path from 'path'; -import Sequelize from 'sequelize'; -import configs from '../config/config'; +'use strict'; +const fs = require('fs'); +const path = require('path'); +const Sequelize = require('sequelize'); const basename = path.basename(__filename); -// istanbul ignore next const env = process.env.NODE_ENV || 'development'; -const config = configs[env]; -const capitalize = string => string[0].toUpperCase() + string.slice(1); +const config = require(__dirname + '/../config/config.json')[env]; +const db = {}; -const sequelize = (() => { - if (process.env.DATABASE_URL) { - // the application is executed on Heroku ... use the postgres database - return new Sequelize(process.env.DATABASE_URL, { - dialect: 'postgres', - protocol: 'postgres', - }); - } else { - return new Sequelize(config.database, config.username, config.password, { - ...config, - operatorsAliases: false, - logging: false, - }); - } -})(); +let sequelize; +if (config.use_env_variable) { + sequelize = new Sequelize(process.env[config.use_env_variable], config); +} else { + sequelize = new Sequelize(config.database, config.username, config.password, config); +} -const db = fs +fs .readdirSync(__dirname) - .filter( - file => - file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js', - ) - .reduce( - (acc, file) => { - const model = sequelize.import(path.join(__dirname, file)); - acc[capitalize(model.name)] = model; - return acc; - }, - {sequelize, Sequelize}, - ); + .filter(file => { + return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'); + }) + .forEach(file => { + const model = sequelize['import'](path.join(__dirname, file)); + db[model.name] = model; + }); Object.keys(db).forEach(modelName => { - // istanbul ignore next if (db[modelName].associate) { db[modelName].associate(db); } }); -// Syntax required to destructure models off of exported db +db.sequelize = sequelize; +db.Sequelize = Sequelize; + module.exports = db; diff --git a/server/db/models/plexSection.js b/server/db/models/plexSection.js index bd72974..5bde144 100644 --- a/server/db/models/plexSection.js +++ b/server/db/models/plexSection.js @@ -1,3 +1,4 @@ +import Sequelize from 'sequelize'; module.exports = (sequelize, DataTypes) => { const PlexSection = sequelize.define( 'PlexSection', diff --git a/server/db/models/plexlibrary.js b/server/db/models/plexlibrary.js index 2312798..7fe26dd 100644 --- a/server/db/models/plexlibrary.js +++ b/server/db/models/plexlibrary.js @@ -1,3 +1,4 @@ +import Sequelize from 'sequelize'; module.exports = (sequelize, DataTypes) => { const PlexLibrary = sequelize.define( 'PlexLibrary', diff --git a/server/db/models/user.js b/server/db/models/user.js index 9a02673..14f52d7 100644 --- a/server/db/models/user.js +++ b/server/db/models/user.js @@ -1,3 +1,5 @@ +import Sequelize from 'sequelize'; + module.exports = (sequelize, DataTypes) => { const User = sequelize.define( 'User', diff --git a/server/db/scripts/index.js b/server/db/scripts/index.js index 7d3caca..029c986 100644 --- a/server/db/scripts/index.js +++ b/server/db/scripts/index.js @@ -88,12 +88,11 @@ const init = () => const truncate = model => models[model] .destroy({ - where: {}, - force: true, - paranoid: false, + truncate: {cascade: true}, }) - .catch(() => { + .catch(e => { console.log('Error truncating', model); + console.log(e); process.exit(EXIT_CODE); }); diff --git a/server/db/scripts/setup.js b/server/db/scripts/setup.js deleted file mode 100644 index 046f461..0000000 --- a/server/db/scripts/setup.js +++ /dev/null @@ -1,61 +0,0 @@ -/* eslint-disable no-console */ -const {exec} = require('child_process'); -const configs = require('../config/config'); - -const mode = ( - process.argv.find(arg => /production$|development$/.test(arg)) || - 'development' -).replace(/[^\w]/g, ''); - -const {username, database, host} = configs[mode]; - -if (!username || !database || !host) { - console.error('Please ensure all required parameters are supplied:'); - console.error('username:', username); - console.error('database:', database); - console.error('host:', host); - process.exit(1); -} - -console.log(username, database, host); - -exec( - `createdb -U ${username} -h ${host} ${database}`, - (err, stdout, stderr) => { - if (err) { - console.error('Error creating DB.'); - console.error(err || stderr); - process.exit(1); - } - - console.log('Created DB.'); - exec( - `./node_modules/.bin/sequelize db:migrate --env ${mode}`, - (err2, stdout2) => { - if (err2) { - console.error('Error running migrations.'); - console.error(err2); - console.error('Dropping DB'); - exec( - `dropdb -U ${username} -h ${host} ${database}`, - (err3, stdout3, stderr3) => { - if (err2) { - console.error('Error dropping DB'); - console.error(err3 || stderr3); - process.exit(1); - } - - console.info('Dropped DB.'); - process.exit(0); - }, - ); - } else { - console.log(stdout2); - console.log('Migrations complete.'); - console.log('Process finished. Exiting.'); - process.exit(0); - } - }, - ); - }, -); diff --git a/server/db/seeders/index.js b/server/db/seeders/index.js index e8bf85b..2610098 100644 --- a/server/db/seeders/index.js +++ b/server/db/seeders/index.js @@ -2,17 +2,27 @@ export default { User: [ { id: 1, - firstName: 'Michael', + firstName: 'Mike', lastName: 'Rode', googleId: '101111197386111111151', - email: 'michaelrode44@gmail.com', - plexUrl: 'http://99.99.99.993:32400', + email: 'mike@email.com', + plexUrl: 'https://plex.mjrflix.com', plexPinId: '5425341', - plexToken: 'MkaxxxxxxxJBGJxxxcV2', + plexToken: 'testPlexApiToken', sonarrUrl: null, sonarrApiKey: null, createdAt: '2019-09-01 14:36:57.418-05', updatedAt: '2019-09-01 14:37:09.415-05', }, ], + + PlexSection: [ + { + id: 1, + title: 'TV Shows', + type: 'show', + key: 4, + UserId: 1, + }, + ], };