diff options
Diffstat (limited to 'ui/imports/api/clique-types')
-rw-r--r-- | ui/imports/api/clique-types/clique-types.js | 107 | ||||
-rw-r--r-- | ui/imports/api/clique-types/methods.js | 108 | ||||
-rw-r--r-- | ui/imports/api/clique-types/server/publications.js | 34 |
3 files changed, 249 insertions, 0 deletions
diff --git a/ui/imports/api/clique-types/clique-types.js b/ui/imports/api/clique-types/clique-types.js new file mode 100644 index 0000000..852c319 --- /dev/null +++ b/ui/imports/api/clique-types/clique-types.js @@ -0,0 +1,107 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / +// / +// All rights reserved. This program and the accompanying materials / +// are made available under the terms of the Apache License, Version 2.0 / +// which accompanies this distribution, and is available at / +// http://www.apache.org/licenses/LICENSE-2.0 / +///////////////////////////////////////////////////////////////////////////////////////// +import { Mongo } from 'meteor/mongo'; +import { SimpleSchema } from 'meteor/aldeed:simple-schema'; +import * as R from 'ramda'; +import { Constants } from '/imports/api/constants/constants'; +import { Environments } from '/imports/api/environments/environments'; +import { LinkTypes } from '/imports/api/link-types/link-types'; + +export const CliqueTypes = new Mongo.Collection( + 'clique_types', { idGeneration: 'MONGO' }); + +let schema = { + _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, + + environment: { + type: String, + custom: function () { + let that = this; + let env = Environments.findOne({ name: that.value }); + + if (R.isNil(env)) { + return 'notAllowed'; + } + } + }, + + focal_point_type: { + type: String, + custom: function () { + let that = this; + let values = Constants.findOne({ name: 'object_types_for_links' }).data; + + if (R.isNil(R.find(R.propEq('value', that.value), values))) { + return 'notAllowed'; + } + } + }, + + link_types: { + type: [String], + minCount: 1, + custom: function () { + let that = this; + let findResult = R.all(function (pLinkType) { + if (R.isNil(LinkTypes.findOne({ type: pLinkType }))) { + return false; + } + + return true; + }, that.value); + + if (! findResult) { return 'notAllowed'; } + + return; + }, + }, + + name: { + type: String + }, +}; + +let simpleSchema = new SimpleSchema(schema); + +simpleSchema.addValidator(function () { + let that = this; + + let existing = CliqueTypes.findOne({ + environment: that.field('environment').value, + focal_point_type: that.field('focal_point_type').value + }); + + if (R.allPass([ + R.pipe(R.isNil, R.not), + R.pipe(R.propEq('_id', that.docId), R.not) + ])(existing)) { + + return 'alreadyExists'; + } +}); + +simpleSchema.addValidator(function () { + let that = this; + + let existing = CliqueTypes.findOne({ + environment: that.field('environment').value, + name: that.field('name').value + }); + + if (R.allPass([ + R.pipe(R.isNil, R.not), + R.pipe(R.propEq('_id', that.docId), R.not) + ])(existing)) { + + return 'alreadyExists'; + } +}); + +CliqueTypes.schema = simpleSchema; +CliqueTypes.attachSchema(CliqueTypes.schema); diff --git a/ui/imports/api/clique-types/methods.js b/ui/imports/api/clique-types/methods.js new file mode 100644 index 0000000..a62c22f --- /dev/null +++ b/ui/imports/api/clique-types/methods.js @@ -0,0 +1,108 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / +// / +// All rights reserved. This program and the accompanying materials / +// are made available under the terms of the Apache License, Version 2.0 / +// which accompanies this distribution, and is available at / +// http://www.apache.org/licenses/LICENSE-2.0 / +///////////////////////////////////////////////////////////////////////////////////////// +import { ValidatedMethod } from 'meteor/mdg:validated-method'; +import * as R from 'ramda'; +import { Roles } from 'meteor/alanning:roles'; + +import { CliqueTypes } from './clique-types'; + +export const insert = new ValidatedMethod({ + name: 'clique_types.insert', + validate: CliqueTypes.simpleSchema() + .pick([ + 'environment', + 'focal_point_type', + 'link_types', + 'link_types.$', + 'name', + ]).validator({ clean: true, filter: false }), + run({ + environment, + focal_point_type, + link_types, + name, + }) { + if (! Roles.userIsInRole(Meteor.userId(), 'manage-clique-types', Roles.DEFAULT_GROUP)) { + throw new Meteor.Error('unauthorized for adding clique type'); + } + + let cliqueType = CliqueTypes.schema.clean({}); + + cliqueType = R.merge(cliqueType, { + environment, + focal_point_type, + link_types, + name, + }); + + CliqueTypes.insert(cliqueType); + } +}); + +export const remove = new ValidatedMethod({ + name: 'clique_types.remove', + validate: CliqueTypes.simpleSchema() + .pick([ + '_id', + ]).validator({ clean: true, filter: false }), + run({ + _id + }) { + + if (! Roles.userIsInRole(Meteor.userId(), 'manage-clique-types', Roles.DEFAULT_GROUP)) { + throw new Meteor.Error('unauthorized for removing clique type'); + } + + let cliqueType = CliqueTypes.findOne({ _id: _id }); + console.log('clique type for remove: ', cliqueType); + + CliqueTypes.remove({ _id: _id }); + } +}); + +export const update = new ValidatedMethod({ + name: 'clique_types.update', + validate: CliqueTypes.simpleSchema() + .pick([ + '_id', + 'environment', + 'focal_point_type', + 'link_types', + 'link_types.$', + 'name', + ]).validator({ clean: true, filter: false }), + run({ + _id, + environment, + focal_point_type, + link_types, + name, + }) { + if (! Roles.userIsInRole(Meteor.userId(), 'manage-clique-types', Roles.DEFAULT_GROUP)) { + throw new Meteor.Error('unauthorized for updating clique type'); + } + + let cliqueType = CliqueTypes.findOne({ _id: _id }); + console.log('clique type for remove: ', cliqueType); + + cliqueType = R.merge(R.pick([ + 'environment', + 'focal_point_type', + 'link_types', + 'name', ], + cliqueType), { + environment, + focal_point_type, + link_types, + name, + }); + + CliqueTypes.update({ _id: _id }, { $set: cliqueType }); + } +}); diff --git a/ui/imports/api/clique-types/server/publications.js b/ui/imports/api/clique-types/server/publications.js new file mode 100644 index 0000000..95274b9 --- /dev/null +++ b/ui/imports/api/clique-types/server/publications.js @@ -0,0 +1,34 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / +// / +// All rights reserved. This program and the accompanying materials / +// are made available under the terms of the Apache License, Version 2.0 / +// which accompanies this distribution, and is available at / +// http://www.apache.org/licenses/LICENSE-2.0 / +///////////////////////////////////////////////////////////////////////////////////////// +import { Meteor } from 'meteor/meteor'; +import * as R from 'ramda'; + +import { CliqueTypes } from '../clique-types.js'; + +Meteor.publish('clique_types?env*', function (env) { + console.log('server subscribtion: clique_types?env*'); + console.log(env); + + //let that = this; + + let query = {}; + if (! R.isNil(env)) { query = R.assoc('environment', env, query); } + console.log('-query: ', query); + return CliqueTypes.find(query); +}); + +Meteor.publish('clique_types?_id', function (_id) { + console.log('server subscribtion: clique_types?_id'); + console.log(_id); + + //let that = this; + + let query = { _id: _id }; + return CliqueTypes.find(query); +}); |