diff options
| author | Jules Laplace <jules@okfoc.us> | 2014-09-04 17:52:48 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2014-09-04 17:52:48 -0400 |
| commit | 415dad29407362a76fde6d07d8b100285a84518d (patch) | |
| tree | f858d4f7201dc6031d6cd54a7da25808b44a48ec /server/lib/views | |
| parent | 8bf2ead240f5daeac98b3a92c81f37b77fd4ddbd (diff) | |
media api
Diffstat (limited to 'server/lib/views')
| -rw-r--r-- | server/lib/views/staff.js | 141 |
1 files changed, 129 insertions, 12 deletions
diff --git a/server/lib/views/staff.js b/server/lib/views/staff.js index b78fd5a..b9fe78a 100644 --- a/server/lib/views/staff.js +++ b/server/lib/views/staff.js @@ -28,10 +28,10 @@ var staff = module.exports = { middleware: { ensureUsers: function(req, res, next){ - var limit = Math.max( Number(req.params.limit) || 50, 200 ) - var offset = Number(req.params.offset) || 0 + var limit = Math.max( Number(req.query.limit) || 50, 200 ) + var offset = Number(req.query.offset) || 0 var sort - switch (req.params.sort) { + switch (req.query.sort) { case 'date': sort = {'created_at': -1} break @@ -60,9 +60,10 @@ var staff = module.exports = { }, ensureProjects: function(req, res, next){ - var offset = Number(req.params.offset) || 0 + var limit = Math.max( Number(req.query.limit) || 50, 200 ) + var offset = Number(req.query.offset) || 0 var sort - switch (req.params.sort) { + switch (req.query.sort) { case 'date': sort = {'created_at': -1} break @@ -74,13 +75,34 @@ var staff = module.exports = { .select(staff.fields.project) .sort(sort) .skip(offset) - .limit(50) + .limit(limit) .exec(function (err, projects) { res.locals.projects = projects.map(staff.helpers.project) next() }) }, + ensureMedia: function(req, res, next){ + var limit = Math.max( Number(req.query.limit) || 50, 200 ) + var offset = Number(req.query.offset) || 0 + var sort + switch (req.query.sort) { + default: + case 'date': + sort = {'created_at': -1} + break + } + Media.find({}) + // .select(staff.fields.media) + .sort(sort) + .skip(offset) + .limit(limit) + .exec(function (err, media) { + res.locals.media = media.map(staff.helpers.media) + next() + }) + }, + ensureRecentProjects: function(req, res, next){ var dreq = { params: { sort: 'created_at', limit: 20, offset: 0 } } staff.middleware.ensureProjects(dreq, res, next) @@ -88,18 +110,32 @@ var staff = module.exports = { ensureProjectsUsers: function(req, res, next){ if (! res.locals.projects || ! res.locals.projects.length) { return next() } + staff.middleware.ensureObjectsUsers(res.locals.projects, next) + }, + + ensureMediaUsers: function(req, res, next){ + if (! res.locals.media || ! res.locals.media.length) { return next() } + staff.middleware.ensureObjectsUsers(res.locals.media, next) + }, + + ensureMediaUser: function(req, res, next){ + if (! res.locals.media) { return next() } + staff.middleware.ensureObjectsUsers([ res.locals.media ], next) + }, + + ensureObjectsUsers: function(objects, next){ var dedupe = {}, user_ids - res.locals.projects.forEach(function(project){ - dedupe[ project.user_id ] = dedupe[ project.user_id ] || [] - dedupe[ project.user_id ].push(project) + objects.forEach(function(obj){ + dedupe[ obj.user_id ] = dedupe[ obj.user_id ] || [] + dedupe[ obj.user_id ].push(obj) }) user_ids = _.keys(dedupe) User.find({ _id: user_ids }) .select(staff.fields.user) .exec(function (err, users) { users.forEach(function(user){ - dedupe[user._id].forEach(function(project){ - project.user = user + dedupe[user._id].forEach(function(obj){ + obj.user = user }) }) next() @@ -125,6 +161,25 @@ var staff = module.exports = { } }, + ensureSingleMedia: function(req, res, next){ + var id = req.params.id + if (id) { + Media.findOne({ _id: id }, function (err, id) { + if (media) { + res.locals.media = req.method == "GET" ? staff.helpers.media(media) : media + } + else { + res.locals.media = null + } + next() + }) + } + else { + res.locals.media = null + next() + } + }, + ensureUsersCount: function(req, res, next){ User.count({}, function(err, count){ res.locals.userCount = count || 0 @@ -138,6 +193,13 @@ var staff = module.exports = { next() }) }, + + ensureMediaCount: function(req, res, next){ + Media.count({}, function(err, count){ + res.locals.mediaCount = count || 0 + next() + }) + }, ensureProfileProjectCount: function(req, res, next){ if (! res.locals.profile) { return next() } @@ -202,7 +264,14 @@ var staff = module.exports = { project.date = moment( project.updated_at || project.created_at ).format("M/DD/YYYY H:MM") project.user = {} return project - } + }, + + media: function(media){ + media = media.toObject() + media.date = moment( media.updated_at || media.created_at ).format("M/DD/YYYY H:MM") + media.user = {} + return media + } }, route: function(app){ @@ -213,9 +282,14 @@ var staff = module.exports = { staff.middleware.ensureRecentUsers, staff.middleware.ensureUsersCount, staff.middleware.ensureProjectsCount, + staff.middleware.ensureMediaCount, staff.index ); + + // + // users + app.get('/staff/users', middleware.ensureAuthenticated, middleware.ensureIsStaff, @@ -244,6 +318,10 @@ var staff = module.exports = { staff.users.bless ); + + // + // projects + app.get('/staff/projects', middleware.ensureAuthenticated, middleware.ensureIsStaff, @@ -266,6 +344,28 @@ var staff = module.exports = { staff.projects.show ); + + // + // media + + app.get('/staff/media', + middleware.ensureAuthenticated, + middleware.ensureIsStaff, + + staff.middleware.ensureMedia, + staff.middleware.ensureMediaUsers, + + staff.media.index + ); + app.get('/staff/media/:id', + middleware.ensureAuthenticated, + middleware.ensureIsStaff, + + staff.middleware.ensureSingleMedia, + staff.middleware.ensureMediaUser, + + staff.media.show + ); }, @@ -316,5 +416,22 @@ var staff = module.exports = { } }, }, + + media: { + index: function(req, res){ + res.render('staff/media/index') + }, + show: function(req, res){ + if (res.locals.project) { + res.render('staff/media/show', { + mediaJSON: util.escape( JSON.stringify( res.locals.media ) ), + mediaUserJSON: util.escape( JSON.stringify( res.locals.mediaUser ) ), + }) + } + else { + res.render('staff/media/show_404') + } + }, + } }
\ No newline at end of file |
