Added subs management (wip)

This commit is contained in:
vjrj 2017-12-16 18:47:08 +01:00
parent 6123977974
commit 316e14f0ea
21 changed files with 427 additions and 39 deletions

View file

@ -3,7 +3,7 @@
import { Mongo } from 'meteor/mongo';
import SimpleSchema from 'simpl-schema';
const Subscriptions = new Mongo.Collection('subscriptions');
const Subscriptions = new Mongo.Collection('subscriptions', { idGeneration: 'MONGO' });
Subscriptions.allow({
insert: () => false,
@ -41,9 +41,10 @@ Subscriptions.schema = new SimpleSchema({
location: Object,
'location.lat': SimpleSchema.Integer,
'location.lon': SimpleSchema.Integer,
distance: Number
distance: Number,
owner: String
});
Subscriptions.attachSchema(Subscriptions.schema);
// Subscriptions.attachSchema(Subscriptions.schema);
export default Subscriptions;

View file

@ -0,0 +1,53 @@
import { Meteor } from 'meteor/meteor';
import { check, Match } from 'meteor/check';
import Subscriptions from './Subscriptions';
import rateLimit from '../../modules/rate-limit';
Meteor.methods({
'subscriptions.insert': function subscriptionsInsert(doc) {
check(doc, {
location: Match.ObjectIncluding({ lat: Number, lon: Number }),
distance: Number
});
try {
return Subscriptions.insert({ owner: this.userId, ...doc });
} catch (exception) {
throw new Meteor.Error('500', exception);
}
},
'subscriptions.update': function subscriptionsUpdate(doc) {
check(doc, {
_id: String,
location: Match.ObjectIncluding({ lat: Number, lon: Number }),
distance: Number
});
try {
const subscriptionId = doc._id;
Subscriptions.update(subscriptionId, { $set: doc });
return subscriptionId; // Return _id so we can redirect to subscription after update.
} catch (exception) {
throw new Meteor.Error('500', exception);
}
},
'subscriptions.remove': function subscriptionsRemove(subscriptionId) {
check(subscriptionId, Meteor.Collection.ObjectID);
try {
return Subscriptions.remove(subscriptionId);
} catch (exception) {
throw new Meteor.Error('500', exception);
}
}
});
rateLimit({
methods: [
'subscriptions.insert',
'subscriptions.update',
'subscriptions.remove'
],
limit: 5,
timeRange: 1000
});

View file

@ -34,3 +34,13 @@ Meteor.publishTransformed('userSubsToFires', function transform() {
return doc;
});
});
Meteor.publish('subscriptions', function subscriptions() {
return Subscriptions.find({ owner: this.userId });
});
// Note: subscriptions.view is also used when editing an existing subscription.
Meteor.publish('subscriptions.view', function subscriptionsView(subscriptionId) {
check(subscriptionId, String);
return Subscriptions.find({ _id: subscriptionId, owner: this.userId });
});