diff --git a/config/index.js b/config/index.js index 08a050b..a1b5f78 100644 --- a/config/index.js +++ b/config/index.js @@ -1,4 +1,5 @@ /* eslint-disable no-undef */ +require('custom-env').env(); require('dotenv').config(); const _ = require('lodash'); diff --git a/package-lock.json b/package-lock.json index a56380f..ef0297b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1764,6 +1764,14 @@ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", "dev": true }, + "custom-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/custom-env/-/custom-env-1.0.0.tgz", + "integrity": "sha512-7qFN5KcW5BQh2DXjYaCKIW3r39sbv9LCPOfc3kANoh361tdpoQ2Q+twrA93w0zl6zYotq4btZDD2idU0570F2w==", + "requires": { + "dotenv": "*" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -8469,9 +8477,9 @@ "dev": true }, "nyc": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.2.0.tgz", - "integrity": "sha512-gQBlOqvfpYt9b2PZ7qElrHWt8x4y8ApNfbMBoDPdl3sY4/4RJwCxDGTSqhA9RnaguZjS5nW7taW8oToe86JLgQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.3.0.tgz", + "integrity": "sha512-P+FwIuro2aFG6B0Esd9ZDWUd51uZrAEoGutqZxzrVmYl3qSfkLgcQpBPBjtDFsUQLFY1dvTQJPOyeqr8S9GF8w==", "dev": true, "requires": { "archy": "^1.0.0", @@ -8484,10 +8492,10 @@ "glob": "^7.1.3", "istanbul-lib-coverage": "^2.0.3", "istanbul-lib-hook": "^2.0.3", - "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-instrument": "^3.1.0", "istanbul-lib-report": "^2.0.4", "istanbul-lib-source-maps": "^3.0.2", - "istanbul-reports": "^2.1.0", + "istanbul-reports": "^2.1.1", "make-dir": "^1.3.0", "merge-source-map": "^1.1.0", "resolve-from": "^4.0.0", @@ -8524,11 +8532,11 @@ "dev": true }, "async": { - "version": "2.6.1", + "version": "2.6.2", "bundled": true, "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "balanced-match": { @@ -8545,11 +8553,6 @@ "concat-map": "0.0.1" } }, - "builtin-modules": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, "caching-transform": { "version": "3.0.1", "bundled": true, @@ -8748,7 +8751,7 @@ "dev": true }, "handlebars": { - "version": "4.0.12", + "version": "4.1.0", "bundled": true, "dev": true, "requires": { @@ -8812,14 +8815,6 @@ "bundled": true, "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, "is-fullwidth-code-point": { "version": "2.0.0", "bundled": true, @@ -8888,11 +8883,11 @@ } }, "istanbul-reports": { - "version": "2.1.0", + "version": "2.1.1", "bundled": true, "dev": true, "requires": { - "handlebars": "^4.0.11" + "handlebars": "^4.1.0" } }, "json-parse-better-errors": { @@ -8964,13 +8959,13 @@ } }, "mem": { - "version": "4.0.0", + "version": "4.1.0", "bundled": true, "dev": true, "requires": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "p-is-promise": "^2.0.0" } }, "merge-source-map": { @@ -9032,12 +9027,12 @@ "dev": true }, "normalize-package-data": { - "version": "2.4.0", + "version": "2.5.0", "bundled": true, "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } @@ -9098,7 +9093,7 @@ "dev": true }, "p-is-promise": { - "version": "1.1.0", + "version": "2.0.0", "bundled": true, "dev": true }, @@ -9158,6 +9153,11 @@ "bundled": true, "dev": true }, + "path-parse": { + "version": "1.0.6", + "bundled": true, + "dev": true + }, "path-type": { "version": "3.0.0", "bundled": true, @@ -9230,6 +9230,14 @@ "bundled": true, "dev": true }, + "resolve": { + "version": "1.10.0", + "bundled": true, + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, "resolve-from": { "version": "4.0.0", "bundled": true, diff --git a/package.json b/package.json index 9c0c333..f48dc27 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,9 @@ "description": "", "main": "index.js", "scripts": { - "test": "mocha --compilers js:babel-core/register ./test/**/**/**/*.test.js --exit", + "test": "PLEX_API_TOKEN=testPlexApiToken mocha --compilers js:babel-core/register ./test/**/**/**/*.test.js --exit", "dev": "nodemon --exec babel-node --inspect index.js", + "debug": "nodemon --exec babel-node --inspect index.js", "start": "nodemon --exec babel-node index.js" }, "author": "", @@ -15,6 +16,7 @@ "body-parser": "^1.18.3", "build-url": "^1.3.2", "cors": "^2.8.5", + "custom-env": "^1.0.0", "dotenv": "^6.2.0", "express": "^4.16.4", "lodash": "^4.17.11", @@ -46,7 +48,7 @@ "nock": "^10.0.6", "nodemon": "^1.18.9", "npm": "^6.7.0", - "nyc": "^13.2.0", + "nyc": "^13.3.0", "prettier": "1.16.4", "supertest": "^3.4.2" } diff --git a/server/controllers/apis/plex/index.js b/server/controllers/apis/plex/index.js index 1b6d87c..c948cf4 100644 --- a/server/controllers/apis/plex/index.js +++ b/server/controllers/apis/plex/index.js @@ -3,6 +3,7 @@ import plexService from '../../../services/plexApi'; const router = Router(); +// users router.get('/users', plexService.getUsers); router.get('/most-watched', plexService.getMostWatched); router.get('/sections', plexService.getSections); diff --git a/server/models/index.js b/server/models/index.js index 1d0e2e7..33e34d2 100644 --- a/server/models/index.js +++ b/server/models/index.js @@ -7,7 +7,7 @@ const sequelize = new Sequelize( { dialect: 'postgres', host: 'localhost', - logging: false, + // logging: false, }, ); diff --git a/server/models/plexLibrary.js b/server/models/plexLibrary.js index eb5ad8b..4d2fbd9 100644 --- a/server/models/plexLibrary.js +++ b/server/models/plexLibrary.js @@ -1,6 +1,9 @@ const plexLibrary = (sequelize, DataTypes) => { const plexLibrary = sequelize.define('plex_library', { - title: DataTypes.STRING, + title: { + type: DataTypes.STRING, + unique: true, + }, type: DataTypes.STRING, views: DataTypes.INTEGER, rating_key: DataTypes.INTEGER, diff --git a/server/services/plexApi/importData.js b/server/services/plexApi/importData.js index fc2d99f..d26ad25 100644 --- a/server/services/plexApi/importData.js +++ b/server/services/plexApi/importData.js @@ -39,18 +39,25 @@ const importLibrary = async sectionId => { const createLibrary = libraryData => { console.log(libraryData[1]); libraryData.forEach(async data => { - await models.PlexLibrary.create({ - userId: 1, - title: data.title, - type: data.type, - views: data.views, - rating_key: data.ratingKey, - metadata_path: data.key, - summary: data.summary, - rating: data.rating, - year: data.year, - genre: JSON.stringify(data.Genre), - }); + await models.PlexLibrary.upsert( + { + userId: 1, + title: data.title, + type: data.type, + views: data.views, + rating_key: data.ratingKey, + metadata_path: data.key, + summary: data.summary, + rating: data.rating, + year: data.year, + genre: JSON.stringify(data.Genre), + }, + { + where: { + title: data.title, + }, + }, + ); }); }; diff --git a/server/services/plexApi/plexApi.js b/server/services/plexApi/plexApi.js index 1f4efe1..28112cf 100644 --- a/server/services/plexApi/plexApi.js +++ b/server/services/plexApi/plexApi.js @@ -45,9 +45,10 @@ PlexApiClient.prototype.mostWatchedUrlParams = function(req) { }; PlexApiClient.prototype.getLibraryDataBySectionUrlParams = function(req) { + const sectionId = req.sectionId || req.params.id; return { host: config.plex.plexServerUrl, - path: `/library/sections/${req.params.id}/all`, + path: `/library/sections/${sectionId}/all`, queryParams: { 'X-Plex-Token': this.options.token || config.plex.token, },