Vulcan/packages/nova-voting/lib/custom_fields.js

229 lines
4.4 KiB
JavaScript
Raw Normal View History

import Telescope from 'meteor/nova:lib';
import Users from "meteor/nova:users";
2016-06-23 11:40:35 +09:00
import Posts from "meteor/nova:posts";
2016-06-23 12:17:39 +09:00
import Comments from "meteor/nova:comments";
const alwaysPublic = user => true;
Users.addField([
/**
An array containing comments upvotes
*/
{
fieldName: '__upvotedComments',
fieldSchema: {
type: [Telescope.schemas.votes],
publish: false,
optional: true,
viewableIf: alwaysPublic,
resolveAs: '__upvotedComments: [Vote]',
}
},
/**
An array containing posts upvotes
*/
{
fieldName: '__upvotedPosts',
fieldSchema: {
type: [Telescope.schemas.votes],
publish: false,
optional: true,
viewableIf: alwaysPublic,
resolveAs: '__upvotedPosts: [Vote]',
}
},
/**
An array containing comment downvotes
*/
{
fieldName: '__downvotedComments',
fieldSchema: {
type: [Telescope.schemas.votes],
publish: false,
optional: true,
viewableIf: alwaysPublic,
resolveAs: '__downvotedComments: [Vote]',
}
},
/**
An array containing posts downvotes
*/
{
fieldName: '__downvotedPosts',
fieldSchema: {
type: [Telescope.schemas.votes],
publish: false,
optional: true,
viewableIf: alwaysPublic,
resolveAs: '__downvotedPosts: [Vote]',
}
},
]);
2016-02-17 12:54:18 +09:00
Posts.addField([
2016-02-17 11:28:00 +09:00
/**
How many upvotes the post has received
*/
{
fieldName: "upvotes",
fieldSchema: {
type: Number,
2016-04-05 16:27:48 +09:00
optional: true,
2016-04-14 09:54:41 +09:00
publish: true,
defaultValue: 0,
viewableIf: alwaysPublic,
2016-02-17 11:28:00 +09:00
}
},
/**
An array containing the `_id`s of the post's upvoters
*/
{
fieldName: "upvoters",
fieldSchema: {
type: [String],
2016-04-05 16:27:48 +09:00
optional: true,
publish: true,
viewableIf: alwaysPublic,
resolveAs: 'upvoters: [User]',
2016-02-17 11:28:00 +09:00
}
},
/**
How many downvotes the post has received
*/
{
fieldName: "downvotes",
fieldSchema: {
2016-04-05 16:27:48 +09:00
type: Number,
optional: true,
2016-04-14 09:54:41 +09:00
publish: true,
defaultValue: 0,
viewableIf: alwaysPublic,
2016-02-17 11:28:00 +09:00
}
},
/**
An array containing the `_id`s of the post's downvoters
*/
{
fieldName: "downvoters",
fieldSchema: {
type: [String],
2016-04-05 16:27:48 +09:00
optional: true,
publish: true,
viewableIf: alwaysPublic,
resolveAs: 'downvoters: [User]',
2016-02-17 11:28:00 +09:00
}
},
2016-02-17 12:54:18 +09:00
/**
The post's base score (not factoring in the post's age)
*/
{
fieldName: "baseScore",
fieldSchema: {
type: Number,
decimal: true,
optional: true,
publish: true,
defaultValue: 0,
viewableIf: alwaysPublic,
2016-02-17 12:54:18 +09:00
}
},
/**
The post's current score (factoring in age)
*/
{
fieldName: "score",
fieldSchema: {
type: Number,
decimal: true,
optional: true,
publish: true,
defaultValue: 0,
viewableIf: alwaysPublic,
2016-02-17 12:54:18 +09:00
}
},
]);
Comments.addField([
/**
The number of upvotes the comment has received
*/
{
fieldName: "upvotes",
fieldSchema: {
type: Number,
optional: true,
publish: true,
defaultValue: 0,
viewableIf: alwaysPublic,
2016-02-17 12:54:18 +09:00
}
},
/**
An array containing the `_id`s of upvoters
*/
{
fieldName: "upvoters",
fieldSchema: {
type: [String],
optional: true,
publish: true,
viewableIf: alwaysPublic,
resolveAs: 'upvoters: [User]',
2016-02-17 12:54:18 +09:00
}
},
/**
The number of downvotes the comment has received
*/
{
fieldName: "downvotes",
fieldSchema: {
type: Number,
optional: true,
publish: true,
defaultValue: 0,
viewableIf: alwaysPublic,
2016-02-17 12:54:18 +09:00
}
},
/**
An array containing the `_id`s of downvoters
*/
{
fieldName: "downvoters",
fieldSchema: {
type: [String],
optional: true,
publish: true,
viewableIf: alwaysPublic,
resolveAs: 'downvoters: [User]',
2016-02-17 12:54:18 +09:00
}
},
/**
The comment's base score (not factoring in the comment's age)
*/
{
fieldName: "baseScore",
fieldSchema: {
type: Number,
decimal: true,
optional: true,
publish: true,
defaultValue: 0,
viewableIf: alwaysPublic,
2016-02-17 12:54:18 +09:00
}
},
/**
The comment's current score (factoring in age)
*/
{
fieldName: "score",
fieldSchema: {
type: Number,
decimal: true,
optional: true,
publish: true,
defaultValue: 0,
viewableIf: alwaysPublic,
2016-02-17 12:54:18 +09:00
}
},
2016-02-17 11:28:00 +09:00
]);