consensus
Version:
vote for topics for your next meeting
63 lines (56 loc) • 1.31 kB
JavaScript
var
assert = require('assert'),
P = require('p-promise'),
polyclay = require('polyclay')
;
var Vote = module.exports = polyclay.Model.buildClass(
{
properties:
{
key: 'string',
topic: 'reference',
owner: 'reference',
created: 'date',
modified: 'date',
},
enumerables:
{
state: [ 'mu', 'yes', 'no', 'flag']
},
required: [ 'key', 'topic', 'owner', 'vote' ],
singular: 'vote',
plural: 'votes'
});
polyclay.persist(Vote, 'key');
Vote.fetchFor = function(topic, owner)
{
if (!owner)
return P(null);
var key = topic.key + ':' + owner.email;
return Vote.get(key)
.then(function(vote)
{
if (vote)
return vote;
return Vote.get(topic.key + '|' + owner.email);
});
};
Vote.create = function(opts)
{
assert(opts, 'you must pass an options object to Vote.create()');
assert(opts.owner, 'you must pass opts.owner to Vote.create()');
assert(opts.topic, 'you must pass opts.topic to Vote.create()');
assert(opts.state, 'you must pass opts.state to Vote.create()');
var vote = new Vote();
vote.key = opts.topic.key + ':' + opts.owner.email;
vote.created = Date.now();
vote.modified = vote.created;
vote.owner = opts.owner;
vote.topic = opts.topic;
vote.state = opts.state;
return vote.save()
.then(function()
{
return vote;
});
};