2015-12-16 17:09:22 -08:00
utils = require ' ../lib/utils '
errors = require ' ../commons/errors '
wrap = require ' co-express '
Promise = require ' bluebird '
Patch = require ' ../models/Patch '
2016-02-18 16:41:06 -08:00
mongoose = require ' mongoose '
2016-02-22 15:08:58 -08:00
database = require ' ../commons/database '
parse = require ' ../commons/parse '
2015-12-16 17:09:22 -08:00
module.exports =
patches: (options={}) -> wrap (req, res) ->
dbq = Patch . find ( )
2016-02-22 15:08:58 -08:00
dbq . limit ( parse . getLimitFromReq ( req ) )
dbq . skip ( parse . getSkipFromReq ( req ) )
dbq . select ( parse . getProjectFromReq ( req ) )
2015-12-16 17:09:22 -08:00
id = req . params . handle
2016-02-22 15:08:58 -08:00
if not database . isID ( id )
2015-12-16 17:09:22 -08:00
throw new errors . UnprocessableEntity ( ' Invalid ID ' )
query =
$or: [
{ ' target.original ' : id + ' ' }
{ ' target.original ' : mongoose . Types . ObjectId ( id ) }
]
status: req . query . status or ' pending '
patches = yield dbq . find ( query ) . sort ( ' -created ' )
res . status ( 200 ) . send ( patches )
joinWatchers: (Model, options={}) -> wrap (req, res) ->
2016-02-22 15:08:58 -08:00
doc = yield database . getDocFromHandle ( req , Model )
2015-12-16 17:09:22 -08:00
if not doc
throw new errors . NotFound ( ' Document not found. ' )
2016-02-22 15:08:58 -08:00
if not database . hasAccessToDocument ( req , doc , ' get ' )
2015-12-16 17:09:22 -08:00
throw new errors . Forbidden ( )
updateResult = yield doc . update ( { $addToSet: { watchers: req . user . get ( ' _id ' ) } } )
if updateResult . nModified
watchers = doc . get ( ' watchers ' )
watchers . push ( req . user . get ( ' _id ' ) )
doc . set ( ' watchers ' , watchers )
res . status ( 200 ) . send ( doc )
leaveWatchers: (Model, options={}) -> wrap (req, res) ->
2016-02-22 15:08:58 -08:00
doc = yield database . getDocFromHandle ( req , Model )
2015-12-16 17:09:22 -08:00
if not doc
throw new errors . NotFound ( ' Document not found. ' )
updateResult = yield doc . update ( { $pull: { watchers: req . user . get ( ' _id ' ) } } )
if updateResult . nModified
watchers = doc . get ( ' watchers ' )
watchers = _ . filter watchers , (id) -> not id . equals ( req . user . _id )
doc . set ( ' watchers ' , watchers )
res . status ( 200 ) . send ( doc )