baucis-decorator-vote
v1.0.1
Published
Adds voting to a resource based on certain properties.
Downloads
6
Readme
baucis-decorator-vote
Adds voting to a resource based on certain properties.
Install
npm install baucis-decorators baucis-decorator-vote --save
Usage
You'll need 2 properties for this. One should be of the Boolean
type, which will return true
for the user if they've voted, and should also contain a vote
field with the name of the other property that contains the list of users who have voted. The list should be an array of User ref
s.
Two endpoints are added, vote
and unvote
, so users can then, for example, POST {"id": "123", "voteKey": "trust"}
or {"name": "timbur", "voteKey": "trust"}
to /api/users/vote
.
Example
controllers/User.js
var baucis = require('baucis');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var extend = require('deep-extend');
var ResourceProps = require('../props/Resource.js');
var ResourceController = require('../controllers/Resource.js');
var UserProps = extend({}, ResourceProps);
UserProps.follow = {
type: Boolean,
reserved: true,
vote: 'followedBy'
};
UserProps.followedBy = {
type: [{
type: ObjectId,
ref: 'User'
}],
reserved: true
};
UserProps.trust = {
type: Boolean,
reserved: true,
vote: 'trustedBy'
};
UserProps.trustedBy = {
type: [{
type: ObjectId,
ref: 'User'
}],
reserved: true
};
var UserSchema = new Schema(UserProps);
var UserModel = mongoose.model('User', UserSchema);
var UserController = baucis.rest('User');
var decorators = require('baucis-decorators');
// decorate controller
decorators.add.call(UserController, [
'baucis-decorator-vote', // checks each property for any `vote` fields and adds functionality accordingly
ResourceController // `UserController` will inherit all of `ResourceController`'s decorators
]);
/**
* Expose controller.
*/
module.exports = UserController;