{"size": 3521, "ext": "js", "max_stars_repo_path": "imports/api/publicaciones.js", "max_stars_repo_name": "jsbarragan796/bookex", "max_stars_repo_stars_event_min_datetime": "2018-04-03T12:30:42.000Z", "max_stars_repo_stars_event_max_datetime": "2018-09-11T23:50:22.000Z", "max_issues_repo_path": "imports/api/publicaciones.js", "max_issues_repo_name": "jsbarragan796/bookex", "max_issues_repo_issues_event_min_datetime": "2018-04-17T19:55:05.000Z", "max_issues_repo_issues_event_max_datetime": "2018-04-17T20:05:49.000Z", "max_forks_repo_path": "imports/api/publicaciones.js", "max_forks_repo_name": "jsbarragan796/bookex", "max_forks_repo_forks_event_min_datetime": "2018-04-03T18:52:58.000Z", "max_forks_repo_forks_event_max_datetime": "2018-04-18T00:14:42.000Z"}
{"max_stars_count": 2, "max_issues_count": 3, "max_forks_count": 3, "avg_line_length": 29.8389830508, "max_line_length": 92, "alphanum_fraction": 0.6628798637}
import { Meteor } from "meteor/meteor";
import { Mongo } from "meteor/mongo";
import { check } from "meteor/check";
import { DDPRateLimiter } from "meteor/ddp-rate-limiter";

export const Publicaciones = new Mongo.Collection("libros");
export const Comentarios = new Mongo.Collection("Comentarios");

if (Meteor.isServer) {
  // This code only runs on the server
  Meteor.publish("publicaciones", function () {
    return Publicaciones.find({});
  });
  Meteor.publish("comentarios", function () {
    return Comentarios.find({});
  });

  //limitador de solicitudes
  var requestLimit = 1;
  var requestTimeout = 10000;

  DDPRateLimiter.addRule({
    type: "method",
    name: "publicacion.insert"
  }, requestLimit, requestTimeout);
  DDPRateLimiter.addRule({
    type: "method",
    name: "comentario.insert"
  }, requestLimit, requestTimeout);
  DDPRateLimiter.addRule({
    type: "method",
    name: "comentario.update"
  }, requestLimit, requestTimeout);
  DDPRateLimiter.addRule({
    type: "method",
    name: "publicacion.update.elementos"
  }, requestLimit, requestTimeout);
  DDPRateLimiter.addRule({
    type: "method",
    name: "publicacion.remove"
  }, requestLimit, requestTimeout);
}


Meteor.methods({
  "publicacion.insert" (publicacion, ownerName) {
    check(publicacion, Object);
    check(ownerName, String);
    check(publicacion.titulo, String);
    check(publicacion.autores, String);
    check(publicacion.editorial, String);
    check(publicacion.genero, String);
    check(publicacion.edicion, String);
    check(publicacion.estado, String);
    check(publicacion.para, String);
    if (!this.userId) {
      throw new Meteor.Error("not-authorized");
    }
    Publicaciones.insert({
      titulo: publicacion.titulo,
      autores: publicacion.autores,
      editorial: publicacion.editorial,
      genero: publicacion.genero,
      edicion: publicacion.edicion,
      nota: 0,
      elementos: [{ estado: publicacion.estado, para: publicacion.para,
        addedAt: new Date(), ownerId: this.userId, ownerName: ownerName }],
      comentarios: []
    });
  },
  "publicacion.update.elementos" (idPublicacion, elementos) {
    check(elementos, Array);
    for (var i = 0; i < elementos.length; i++) {
      check(elementos[i].estado, String);
      check(elementos[i].para, String);
      check(elementos[i].addedAt, Date);
      check(elementos[i].ownerId, String);
      check(elementos[i].ownerName, String);
    }
    check(idPublicacion, String);
    if (!this.userId) {
      throw new Meteor.Error("not-authorized");
    }
    Publicaciones.update(idPublicacion, { $set: { elementos: elementos } });
  },
  "comentario.update" (idPublicacion, comentarios, nota) {
    check(comentarios, Array);
    check(idPublicacion, String);
    check(nota, Number);
    if (!this.userId) {
      throw new Meteor.Error("not-authorized");
    }
    Publicaciones.update(idPublicacion, { $set: { nota: nota, comentarios: comentarios } });
  },
  "publicacion.remove" (idPublicacion) {
    check(idPublicacion, String);
    if (!this.userId) {
      throw new Meteor.Error("not-authorized");
    }
    Publicaciones.remove(idPublicacion);
  },

  "comentario.insert" (text, idPublicacion, ownerName) {
    check(text, String);
    check(idPublicacion, String);
    check(ownerName, String);
    if (!this.userId) {
      throw new Meteor.Error("not-authorized");
    }
    Comentarios.insert({
      text,
      idPublicacion,
      ownerId: this.userId,
      ownerName: ownerName
    });
  }
});
