/* jshint node: true */ var _ = require('lodash'), crypto = require('crypto'), util = require('../util'), upload = require('../upload'), config = require('../../../config.json'), Blueprint = require('../schemas/Blueprint'); var blueprint = { user: function(req, res){ var offset = Number(req.query.offset) || 0 var limit = Math.min( Number(req.query.limit), 50 ) || 20 var query = { user_id: req.user._id } if (req.query.tag) { query.tag = req.query.tag } Blueprint.find(query) .sort({'created_at': -1}) .skip(offset) .limit(limit) .exec(function(err, media){ res.json(media || []) }) }, show: function(req, res){ Blueprint.findOne({ slug: req.params.slug }, function(err, doc){ if (doc) { res.json(doc) return } else { Project.count({}, function(err, count){ var name = "Project #" + (count || 0) res.json({ _id: "new", name: name, isNew: true }) }) } }) }, create: function(req, res){ var data = util.cleanQuery(req.body) data.user_id = req.user._id data.created_at = new Date () if (data.tag) { data.tag = util.sanitize(data.tag) } new Blueprint(data).save(function(err, rec){ if (err || ! rec) { return res.json({ error: err }) } return res.json(rec) }) }, upload: function(req, res){ var data = util.cleanQuery(req.body) data.user_id = req.user._id data.created_at = new Date () data.type = "image" upload.put("media", req.files.image, { username: req.user.username, unacceptable: function(err){ res.json({ error: { errors: { media: { message: "Problem saving image: " + err } } } }) }, success: function(url){ data.url = url done() } }) function done () { new Blueprint(data).save(function(err, rec) { if (err || ! rec) { return res.json({ error: err }) } res.json(rec) }) } }, scale: function(req, res){ var _id = req.body._id var data = util.cleanQuery(req.body) if (! _id) { return res.json({ error: 404 }) } Blueprint.findOne({ _id: _id }, function(err, doc){ if (! doc) { return res.json({ error: 404 }) } if (String(doc.user_id) !== String(req.user._id)) { return res.json({ error: 404 }) } doc.scale = data.scale doc.units = data.units doc.line = data.line doc.save(function(err, rec){ if (err || ! rec) { return res.json({ error: err }) } res.json(rec) }) }) }, update: function(req, res){ var _id = req.body._id var data = util.cleanQuery(req.body) if (! _id) { return res.json({ error: 404 }) } Blueprint.findOne({ _id: _id }, function(err, doc){ if (! doc) { return res.json({ error: 404 }) } if (String(doc.user_id) !== String(req.user._id)) { return res.json({ error: 404 }) } doc.name = util.sanitize(data.name) doc.slug = util.slugify(data.name) doc.units = util.sanitize(data.units) doc.viewHeight = util.sanitizeNumber(data.viewHeight) doc.wallHeight = util.sanitizeNumber(data.wallHeight) doc.shapes = JSON.parse(data.shapes) doc.startPosition = JSON.parse(data.startPosition) doc.save(function(err, rec){ if (err || ! rec) { return res.json({ error: err }) } res.json(rec) }) }) }, destroy: function(req, res){ var _id = util.sanitize(req.body._id) if (! _id || ! _id.length) { res.json({ error: 404 }) return } Blueprint.findOne({ _id: _id }, function(err, doc){ if (! doc) { return res.json({ error: 404 }) } if (String(doc.user_id) !== String(req.user._id)) { return res.json({ error: "access denied" }) } Blueprint.remove({ _id: _id }, function(err){ res.json({ status: "OK" }) }) }) } } module.exports = blueprint