codecombat/server/handlers/patch_handler.coffee

68 lines
2.8 KiB
CoffeeScript
Raw Normal View History

Patch = require './../models/Patch'
User = require '../models/User'
2014-06-30 22:16:26 -04:00
Handler = require '../commons/Handler'
schema = require '../../app/schemas/models/patch'
{handlers} = require '../commons/mapping'
2014-06-30 22:16:26 -04:00
mongoose = require 'mongoose'
log = require 'winston'
sendwithus = require '../sendwithus'
2016-03-18 20:05:21 -04:00
slack = require '../slack'
PatchHandler = class PatchHandler extends Handler
modelClass: Patch
editableProperties: []
postEditableProperties: ['delta', 'target', 'commitMessage']
jsonSchema: require '../../app/schemas/models/patch'
makeNewInstance: (req) ->
patch = super(req)
patch.set 'creator', req.user._id
patch.set 'created', new Date().toISOString()
patch.set 'status', 'pending'
patch
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...)
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
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
watchers = doc.targetLoaded.get('watchers') or []
# 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']))
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) =>
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) ->
return if not watcher.get('email')
# return if watcher._id is patchCreator._id
context =
email_id: sendwithus.templates.patch_created
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
commit_message: patch.get('commitMessage')
sendwithus.api.send context, (err, result) ->
2016-03-18 20:05:21 -04:00
sendPatchCreatedSlackMessage: (options) ->
message = "#{options.creator.get('name')} submitted a patch to #{options.target.get('name')}: #{options.patch.get('commitMessage')} #{options.docLink}"
slack.sendSlackMessage message, ['artisans']
2014-08-28 21:55:08 -04:00
module.exports = new PatchHandler()