baucis-decorator-vote

1.0.1 • Public • Published

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 refs.

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;

Package Sidebar

Install

npm i baucis-decorator-vote

Weekly Downloads

1

Version

1.0.1

License

MIT

Last publish

Collaborators

  • timbur