2016-04-06 13:56:06 -04:00
|
|
|
Patch = require './../models/Patch'
|
|
|
|
User = require '../models/User'
|
2014-06-30 22:16:26 -04:00
|
|
|
Handler = require '../commons/Handler'
|
2014-04-12 13:51:02 -04:00
|
|
|
schema = require '../../app/schemas/models/patch'
|
2014-04-08 22:26:19 -04:00
|
|
|
{handlers} = require '../commons/mapping'
|
2014-06-30 22:16:26 -04:00
|
|
|
mongoose = require 'mongoose'
|
2014-04-17 20:09:01 -04:00
|
|
|
log = require 'winston'
|
|
|
|
sendwithus = require '../sendwithus'
|
2016-03-18 20:05:21 -04:00
|
|
|
slack = require '../slack'
|
2014-04-08 22:26:19 -04:00
|
|
|
|
|
|
|
PatchHandler = class PatchHandler extends Handler
|
|
|
|
modelClass: Patch
|
|
|
|
editableProperties: []
|
2014-04-10 16:09:44 -04:00
|
|
|
postEditableProperties: ['delta', 'target', 'commitMessage']
|
2014-04-12 13:51:02 -04:00
|
|
|
jsonSchema: require '../../app/schemas/models/patch'
|
2014-04-08 22:26:19 -04:00
|
|
|
|
|
|
|
makeNewInstance: (req) ->
|
|
|
|
patch = super(req)
|
|
|
|
patch.set 'creator', req.user._id
|
|
|
|
patch.set 'created', new Date().toISOString()
|
|
|
|
patch.set 'status', 'pending'
|
|
|
|
patch
|
|
|
|
|
2015-03-28 16:54:44 -04:00
|
|
|
get: (req, res) ->
|
|
|
|
if req.query.view in ['pending']
|
|
|
|
query = status: 'pending'
|
|
|
|
q = Patch.find(query)
|
|
|
|
q.exec (err, documents) =>
|
|
|
|
return @sendDatabaseError(res, err) if err
|
|
|
|
documents = (@formatEntity(req, doc) for doc in documents)
|
|
|
|
@sendSuccess(res, documents)
|
|
|
|
else
|
|
|
|
super(arguments...)
|
|
|
|
|
2014-04-17 20:09:01 -04:00
|
|
|
onPostSuccess: (req, doc) ->
|
2014-06-30 22:16:26 -04:00
|
|
|
log.error 'Error sending patch created: could not find the loaded target on the patch object.' unless doc.targetLoaded
|
2014-04-17 20:09:01 -04:00
|
|
|
return unless doc.targetLoaded
|
2014-08-28 21:55:08 -04:00
|
|
|
docLink = "http://codecombat.com#{req.headers['x-current-path']}"
|
2016-03-18 20:05:21 -04:00
|
|
|
@sendPatchCreatedSlackMessage creator: req.user, patch: doc, target: doc.targetLoaded, docLink: docLink
|
2014-04-17 20:30:55 -04:00
|
|
|
watchers = doc.targetLoaded.get('watchers') or []
|
2015-05-17 15:17:53 -04:00
|
|
|
# Don't send these emails to the person who submitted the patch, or to Nick, George, or Scott.
|
2015-05-19 13:56:12 -04:00
|
|
|
watchers = (w for w in watchers when not w.equals(req.user.get('_id')) and not (w + '' in ['512ef4805a67a8c507000001', '5162fab9c92b4c751e000274', '51538fdb812dd9af02000001']))
|
2014-04-17 20:09:01 -04:00
|
|
|
return unless watchers?.length
|
2014-06-30 22:16:26 -04:00
|
|
|
User.find({_id: {$in: watchers}}).select({email: 1, name: 1}).exec (err, watchers) =>
|
2014-04-17 20:09:01 -04:00
|
|
|
for watcher in watchers
|
2014-08-28 21:55:08 -04:00
|
|
|
@sendPatchCreatedEmail req.user, watcher, doc, doc.targetLoaded, docLink
|
2014-06-30 22:16:26 -04:00
|
|
|
|
2014-08-28 21:55:08 -04:00
|
|
|
sendPatchCreatedEmail: (patchCreator, watcher, patch, target, docLink) ->
|
2016-07-13 19:50:03 -04:00
|
|
|
return if not watcher.get('email')
|
|
|
|
# return if watcher._id is patchCreator._id
|
2014-04-17 20:09:01 -04:00
|
|
|
context =
|
2016-06-06 19:53:05 -04:00
|
|
|
email_id: sendwithus.templates.patch_created
|
2014-04-17 20:09:01 -04:00
|
|
|
recipient:
|
|
|
|
address: watcher.get('email')
|
|
|
|
name: watcher.get('name')
|
|
|
|
email_data:
|
|
|
|
doc_name: target.get('name') or '???'
|
|
|
|
submitter_name: patchCreator.get('name') or '???'
|
2014-08-28 21:55:08 -04:00
|
|
|
doc_link: docLink
|
2014-04-17 20:09:01 -04:00
|
|
|
commit_message: patch.get('commitMessage')
|
|
|
|
sendwithus.api.send context, (err, result) ->
|
2014-04-08 22:26:19 -04:00
|
|
|
|
2016-03-18 20:05:21 -04:00
|
|
|
sendPatchCreatedSlackMessage: (options) ->
|
2016-03-22 12:51:18 -04:00
|
|
|
message = "#{options.creator.get('name')} submitted a patch to #{options.target.get('name')}: #{options.patch.get('commitMessage')} #{options.docLink}"
|
2016-06-27 12:49:07 -04:00
|
|
|
slack.sendSlackMessage message, ['artisans']
|
2014-08-28 21:55:08 -04:00
|
|
|
|
2014-04-08 22:26:19 -04:00
|
|
|
module.exports = new PatchHandler()
|