index.js 3.17 KB
// import {Parents } from '/imports/collections/parents/index'

import _                                  from 'lodash';
import { Meteor }                         from 'meteor/meteor';
import { Mongo }                          from 'meteor/mongo';
import { SimpleSchema }                   from 'meteor/aldeed:simple-schema';

import { Orgs }                           from '/imports/collections/orgs/index';
import { Users }                          from '/imports/collections/users/index';

class Parent {
  constructor(doc) {
    _.assign(this, doc);
  };

  getUserIds() {
    return _.filter(_.map(this.users, 'userId'));
  };
};
export { Parent };

class ParentsCollection extends Mongo.Collection {
  insert(item, callback) {
    _.assign(item, {
      createdAt:        new Date().getTime(),
    });
    return super.insert(item, callback);
  };
};

export const Parents = new ParentsCollection('Parents', {
  transform: (item) => {
    return new Parent(item);
  },
});

_.assign(Parents, {
  allStudents: () => {
    const user = Users.current();
    if(!user) return null;
    return Orgs.find({'users.userId': user._id});
  },
  current: () => {
    const user = Users.current();
    if(!user) return null;
    return Orgs.findOne({_id: user.orgId});
  },
  currentOrgUsers: () => {
    const OrgsArr = Orgs.current();
    if(!OrgsArr) return null;
    return OrgsArr.users;
  },

});

Parents.deny({
  insert() { return true; },
  update() { return true; },
  remove() { return true; },
});


Parents.schema = new SimpleSchema({
  userId:               { type: String },
  orgId:                { type: String },
  relationship:         { type: String, optional: true },
  gender:               { type: String, optional: true },
  profession:           { type: String, optional: true },
  relationship:         { type: String, optional: true },
  permanentAddress: {
    type: new SimpleSchema({
      home:             { type: String, optional: true },
      street:           { type: String, optional: true },
      town:             { type: String, optional: true },
      city:             { type: String, optional: true },
      state:            { type: String, optional: true },
      zip:              { type: String, optional: true },
    }),
    optional: true
  },
  currentAddress: {
    type: new SimpleSchema({
      home:             { type: String, optional: true },
      street:           { type: String, optional: true },
      town:             { type: String, optional: true },
      city:             { type: String, optional: true },
      state:            { type: String, optional: true },
      zip:              { type: String, optional: true },
    }),
    optional: true
  },
  services: {
    type: Object,
    optional: true,
    blackbox: true,
  },

  isMetaUser:           { type: Boolean, optional: true },

  createdAt:            { type: Date, autoValue: function(){return new Date();}}

});

Parents.attachSchema(Parents.schema);

Parents.privateFields = {
  orgId:              1,
  address:            1,

  isMetaUser:         1,
  createdAt:          1,
};

Parents.publicFields = {
  firstName:          1,
  lastName:           1,
  emails:             1,

  createdAt:          1,
};