From cb2f0bc10da0e7577ae8f5510e1abe258275b2a3 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Wed, 2 Nov 2016 15:42:24 -0600 Subject: [PATCH 1/9] start settings schema --- models/setting.js | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 models/setting.js diff --git a/models/setting.js b/models/setting.js new file mode 100644 index 000000000..2b0013868 --- /dev/null +++ b/models/setting.js @@ -0,0 +1,35 @@ +const mongoose = require('../mongoose'); +const uuid = require('uuid'); +const Schema = mongoose.Schema; + +const SettingSchema = new Schema({ + anonymous_users: {type: Boolean, default: false}, + block_mute_enabled: {type: Boolean, default: false}, + comment_count: {type: Boolean, default: false}, + comment_editing_enabled: {type: Boolean, default: false}, + comments_hidden: {type: Boolean, default: false}, + community_guidelines: {type: Boolean, default: false}, + detailed_flags: {type: Boolean, default: false}, + emojis_enabled: {type: Boolean, default: false}, + following: {type: Boolean, default: false}, + likes_enabled: {type: Boolean, default: false}, + mentions: {type: Boolean, default: false}, + nested_replies: {type: Boolean, default: false}, + notification_timeout: {type: Number, default: 4500}, + permalinks: {type: Boolean, default: false}, + post_button_text: {type: String, default: 'Post'}, + pseudonyms: {type: Boolean, default: false}, + public_profile: {type: Boolean, default: false}, + reactions_enabled: {type: Boolean, default: false}, + reply_button_text: {type: String, default: 'Reply'}, + rich_content: {type: Boolean, default: false}, + show_staff_picks: {type: Boolean, default: false}, + up_down_voting: {type: Boolean, default: false}, + user_badges: {type: Boolean, default: false}, + user_mods_enabled: {type: Boolean, default: false}, + user_stats_enabled: {type: Boolean, default: false} +}); + +const Setting = mongoose.model('Setting', SettingSchema); + +module.exports = Setting; From d35ee8228e978e6f37d30e1b62bd0a373fb24400 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Wed, 2 Nov 2016 15:46:38 -0600 Subject: [PATCH 2/9] add some github templates --- .github/ISSUE_TEMPLATE.md | 5 +++++ .github/PULL_REQUEST_TEMPLATE.md | 9 +++++++++ 2 files changed, 14 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..079766d25 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,5 @@ +### Expected behavior + +### Actual behavior + +### Steps to reproduce behavior diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..f7a219c79 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,9 @@ +## What does this PR do? + +## How do I test this PR? + +- click a button +- view the cat +- see the cat meow + +@coralproject/frontend From 73be4cfe28b7a8bf96f7a255e8ce90da829ab2be Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Thu, 3 Nov 2016 11:25:09 -0600 Subject: [PATCH 3/9] add some update statics --- .eslintrc.json | 1 - models/SETTINGS_ROADMAP.md | 30 +++++++++++++++++++++++++++++ models/setting.js | 37 +++++++++++------------------------- routes/api/settings/index.js | 22 +++++++++++++++++++++ 4 files changed, 63 insertions(+), 27 deletions(-) create mode 100644 models/SETTINGS_ROADMAP.md create mode 100644 routes/api/settings/index.js diff --git a/.eslintrc.json b/.eslintrc.json index f92aa27b1..eec982dac 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -36,7 +36,6 @@ "yoda": [1], "no-path-concat": [2], "no-process-exit": [2], - "camelcase": [1], "eol-last": [1], "no-continue": [1], "no-nested-ternary": [1], diff --git a/models/SETTINGS_ROADMAP.md b/models/SETTINGS_ROADMAP.md new file mode 100644 index 000000000..b49a0f8a9 --- /dev/null +++ b/models/SETTINGS_ROADMAP.md @@ -0,0 +1,30 @@ +These are some settings we're planning on implementing in the future. +I'm keeping them in this file for reference + +```javascript +anonymous_users: {type: Boolean, default: false}, +block_mute_enabled: {type: Boolean, default: false}, +comment_count: {type: Boolean, default: false}, +comment_editing_enabled: {type: Boolean, default: false}, +comments_hidden: {type: Boolean, default: false}, +community_guidelines: {type: Boolean, default: false}, +detailed_flags: {type: Boolean, default: false}, +emojis_enabled: {type: Boolean, default: false}, +following: {type: Boolean, default: false}, +likes_enabled: {type: Boolean, default: false}, +mentions: {type: Boolean, default: false}, +nested_replies: {type: Boolean, default: false}, +notification_timeout: {type: Number, default: 4500}, +permalinks: {type: Boolean, default: false}, +post_button_text: {type: String, default: 'Post'}, +pseudonyms: {type: Boolean, default: false}, +public_profile: {type: Boolean, default: false}, +reactions_enabled: {type: Boolean, default: false}, +reply_button_text: {type: String, default: 'Reply'}, +rich_content: {type: Boolean, default: false}, +show_staff_picks: {type: Boolean, default: false}, +up_down_voting: {type: Boolean, default: false}, +user_badges: {type: Boolean, default: false}, +user_mods_enabled: {type: Boolean, default: false}, +user_stats_enabled: {type: Boolean, default: false} +``` diff --git a/models/setting.js b/models/setting.js index 2b0013868..aec51c810 100644 --- a/models/setting.js +++ b/models/setting.js @@ -3,32 +3,17 @@ const uuid = require('uuid'); const Schema = mongoose.Schema; const SettingSchema = new Schema({ - anonymous_users: {type: Boolean, default: false}, - block_mute_enabled: {type: Boolean, default: false}, - comment_count: {type: Boolean, default: false}, - comment_editing_enabled: {type: Boolean, default: false}, - comments_hidden: {type: Boolean, default: false}, - community_guidelines: {type: Boolean, default: false}, - detailed_flags: {type: Boolean, default: false}, - emojis_enabled: {type: Boolean, default: false}, - following: {type: Boolean, default: false}, - likes_enabled: {type: Boolean, default: false}, - mentions: {type: Boolean, default: false}, - nested_replies: {type: Boolean, default: false}, - notification_timeout: {type: Number, default: 4500}, - permalinks: {type: Boolean, default: false}, - post_button_text: {type: String, default: 'Post'}, - pseudonyms: {type: Boolean, default: false}, - public_profile: {type: Boolean, default: false}, - reactions_enabled: {type: Boolean, default: false}, - reply_button_text: {type: String, default: 'Reply'}, - rich_content: {type: Boolean, default: false}, - show_staff_picks: {type: Boolean, default: false}, - up_down_voting: {type: Boolean, default: false}, - user_badges: {type: Boolean, default: false}, - user_mods_enabled: {type: Boolean, default: false}, - user_stats_enabled: {type: Boolean, default: false} -}); + moderation: {type: String, enum: ['pre', 'post'], default: 'pre'}, + +}, {timestamps: {createdAt: 'created_at', updatedAt: 'updated_at'}}); + +SettingSchema.statics.getSettings = function () { + return this.findOne(); +}; + +SettingSchema.statics.updateSettings = function (setting) { + return this.findOneAndUpdate({}, {$set: setting}, {new: true}); +}; const Setting = mongoose.model('Setting', SettingSchema); diff --git a/routes/api/settings/index.js b/routes/api/settings/index.js new file mode 100644 index 000000000..b801fb8ea --- /dev/null +++ b/routes/api/settings/index.js @@ -0,0 +1,22 @@ +const express = require('express'); +const router = express.Router(); +const path = require('path'); +const Setting = require(path.resolve(__dirname, 'models/setting')); + +router.get('/settings', (req, res, next) => { + Setting.getSettings().then(settings => { + res.json(settings); + }).catch(error => { + next(error); + }); +}); + +router.put('/settings', (req, res, next) => { + Setting.updateSettings(req.body).then(updatedSettings => { + res.json(updatedSettings); + }).catch(error => { + next(error); + }); +}); + +module.exports = router; From c2d4e1255bee5116136fad33ab8684ecfbec11b9 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Thu, 3 Nov 2016 11:33:32 -0600 Subject: [PATCH 4/9] terseness --- models/setting.js | 10 ++++++++-- routes/api/settings/index.js | 12 ++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/models/setting.js b/models/setting.js index aec51c810..2a82d5e94 100644 --- a/models/setting.js +++ b/models/setting.js @@ -1,11 +1,17 @@ const mongoose = require('../mongoose'); -const uuid = require('uuid'); const Schema = mongoose.Schema; const SettingSchema = new Schema({ + id: {type: String, default: '1'}, moderation: {type: String, enum: ['pre', 'post'], default: 'pre'}, -}, {timestamps: {createdAt: 'created_at', updatedAt: 'updated_at'}}); +}, { + _id: false, + timestamps: { + createdAt: 'created_at', + updatedAt: 'updated_at' + } +}); SettingSchema.statics.getSettings = function () { return this.findOne(); diff --git a/routes/api/settings/index.js b/routes/api/settings/index.js index b801fb8ea..36037a184 100644 --- a/routes/api/settings/index.js +++ b/routes/api/settings/index.js @@ -4,19 +4,11 @@ const path = require('path'); const Setting = require(path.resolve(__dirname, 'models/setting')); router.get('/settings', (req, res, next) => { - Setting.getSettings().then(settings => { - res.json(settings); - }).catch(error => { - next(error); - }); + Setting.getSettings().then(res.json).catch(next); }); router.put('/settings', (req, res, next) => { - Setting.updateSettings(req.body).then(updatedSettings => { - res.json(updatedSettings); - }).catch(error => { - next(error); - }); + Setting.updateSettings(req.body).then(res.json).catch(next); }); module.exports = router; From afc3e82d6036e8e8bf99bd5762850953d5dc2204 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Thu, 3 Nov 2016 13:36:31 -0600 Subject: [PATCH 5/9] update routes and paths. add init script --- .gitignore | 1 + bin/init.js | 16 ++++++++++++++++ models/setting.js | 6 +++--- package.json | 1 + routes/api/index.js | 1 + routes/api/settings/index.js | 7 +++---- 6 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 bin/init.js diff --git a/.gitignore b/.gitignore index b0359459e..d52442b57 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ npm-debug.log dist .DS_Store *.iml +.env diff --git a/bin/init.js b/bin/init.js new file mode 100644 index 000000000..e02e97c00 --- /dev/null +++ b/bin/init.js @@ -0,0 +1,16 @@ +const MongoClient = require('mongodb').MongoClient; +const url = process.env.TALK_MONGO_URL; + +if (!url) { + throw new Error('environment variable TALK_MONGO_URL must be defined'); +} + +MongoClient.connect(url).then(db => { + const Setting = db.collection('settings'); + const defaults = {id: 1, moderation: 'pre'}; + + Setting.update({id: 1}, {$setOnInsert: defaults}, {upsert: true}).then(() => { + console.log('created settings object.'); + process.exit(); + }); +}).catch(console.error); diff --git a/models/setting.js b/models/setting.js index 2a82d5e94..dd82b3e42 100644 --- a/models/setting.js +++ b/models/setting.js @@ -3,8 +3,7 @@ const Schema = mongoose.Schema; const SettingSchema = new Schema({ id: {type: String, default: '1'}, - moderation: {type: String, enum: ['pre', 'post'], default: 'pre'}, - + moderation: {type: String, enum: ['pre', 'post'], default: 'pre'} }, { _id: false, timestamps: { @@ -18,7 +17,8 @@ SettingSchema.statics.getSettings = function () { }; SettingSchema.statics.updateSettings = function (setting) { - return this.findOneAndUpdate({}, {$set: setting}, {new: true}); + // there should only ever be one record unless something has gone wrong. + return this.findOneAndUpdate({id: '1'}, {$set: setting}, {new: true}); }; const Setting = mongoose.model('Setting', SettingSchema); diff --git a/package.json b/package.json index b7fb48d34..d91bba9f4 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "imports-loader": "^0.6.5", "json-loader": "^0.5.4", "mocha": "^3.1.2", + "mongodb": "^2.2.11", "pre-git": "^3.10.0", "pym.js": "^1.1.1", "react": "15.3.2", diff --git a/routes/api/index.js b/routes/api/index.js index 7390f2010..cfcae8ecf 100644 --- a/routes/api/index.js +++ b/routes/api/index.js @@ -3,5 +3,6 @@ const express = require('express'); const router = express.Router(); router.use('/comments', require('./comments')); +router.use('/settings', require('./settings')); module.exports = router; diff --git a/routes/api/settings/index.js b/routes/api/settings/index.js index 36037a184..fa5d3a620 100644 --- a/routes/api/settings/index.js +++ b/routes/api/settings/index.js @@ -1,13 +1,12 @@ const express = require('express'); const router = express.Router(); -const path = require('path'); -const Setting = require(path.resolve(__dirname, 'models/setting')); +const Setting = require('../../../models/setting'); -router.get('/settings', (req, res, next) => { +router.get('/', (req, res, next) => { Setting.getSettings().then(res.json).catch(next); }); -router.put('/settings', (req, res, next) => { +router.put('/', (req, res, next) => { Setting.updateSettings(req.body).then(res.json).catch(next); }); From db4694246f97771368b12092d65241038c57e317 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Thu, 3 Nov 2016 13:40:29 -0600 Subject: [PATCH 6/9] update PR template --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f7a219c79..c5ec0d6bf 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -6,4 +6,4 @@ - view the cat - see the cat meow -@coralproject/frontend +@coralproject/tech From 55825c4e03dca0f05a2ca0ba804cbd5ae3480a50 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Thu, 3 Nov 2016 15:21:02 -0600 Subject: [PATCH 7/9] just use the mongoose model --- bin/init.js | 19 +++++-------------- package.json | 1 - 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/bin/init.js b/bin/init.js index e02e97c00..d114d4819 100644 --- a/bin/init.js +++ b/bin/init.js @@ -1,16 +1,7 @@ -const MongoClient = require('mongodb').MongoClient; -const url = process.env.TALK_MONGO_URL; +const Setting = require('../models/setting'); +const defaults = {id: '1', moderation: 'pre'}; -if (!url) { - throw new Error('environment variable TALK_MONGO_URL must be defined'); -} - -MongoClient.connect(url).then(db => { - const Setting = db.collection('settings'); - const defaults = {id: 1, moderation: 'pre'}; - - Setting.update({id: 1}, {$setOnInsert: defaults}, {upsert: true}).then(() => { - console.log('created settings object.'); - process.exit(); - }); +Setting.update({id: '1'}, {$setOnInsert: defaults}, {upsert: true}).then(() => { + console.log('created settings object.'); + process.exit(); }).catch(console.error); diff --git a/package.json b/package.json index d91bba9f4..b7fb48d34 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,6 @@ "imports-loader": "^0.6.5", "json-loader": "^0.5.4", "mocha": "^3.1.2", - "mongodb": "^2.2.11", "pre-git": "^3.10.0", "pym.js": "^1.1.1", "react": "15.3.2", From 5aa077b92efecb75c81700a5bd4d3fbd9ebcf65f Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Thu, 3 Nov 2016 15:22:44 -0600 Subject: [PATCH 8/9] default connection string --- mongoose.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mongoose.js b/mongoose.js index 96e0e5ccc..50f7d7665 100644 --- a/mongoose.js +++ b/mongoose.js @@ -1,5 +1,6 @@ const mongoose = require('mongoose'); const enabled = require('debug').enabled; +const url = process.env.TALK_MONGO_URL || 'mongodb://localhost/talk'; // Use native promises mongoose.Promise = global.Promise; @@ -9,7 +10,7 @@ if (enabled('talk:db')) { } try { - mongoose.connect(process.env.TALK_MONGO_URL, (err) => { + mongoose.connect(url, (err) => { if (err) throw err; console.log('Connected to MongoDB!'); }); From fecff105ec4bc0bd19dcbb6054f79c2fe899c22e Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Thu, 3 Nov 2016 15:26:28 -0600 Subject: [PATCH 9/9] even more default --- mongoose.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mongoose.js b/mongoose.js index 50f7d7665..0aff4c22c 100644 --- a/mongoose.js +++ b/mongoose.js @@ -1,6 +1,6 @@ const mongoose = require('mongoose'); const enabled = require('debug').enabled; -const url = process.env.TALK_MONGO_URL || 'mongodb://localhost/talk'; +const url = process.env.TALK_MONGO_URL || 'mongodb://localhost'; // Use native promises mongoose.Promise = global.Promise;