Guest User

Untitled

a guest
Feb 24th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.57 KB | None | 0 0
  1. const api = require('./gitter-api');
  2. const fetch = require("node-fetch");
  3. const mongoose = require('mongoose');
  4. const Task = require('../models/todoListModel');
  5. mongoose.Promise = global.Promise;
  6.  
  7. const buildMessage = (message) => {
  8. return {
  9. messageId: message.id,
  10. text: message.text,
  11. html: message.html,
  12. sent: message.sent,
  13. userId: message.fromUser.id,
  14. username: message.fromUser.username,
  15. displayName: message.fromUser.displayName,
  16. url: message.fromUser.url,
  17. avatarUrl: message.fromUser.avatarUrl,
  18. avatarUrlSmall: message.fromUser.avatarUrlSmall,
  19. avatarUrlMedium: message.fromUser.avatarUrlMedium,
  20. v: message.fromUser.v,
  21. gv: message.fromUser.gv,
  22. readBy: message.readBy,
  23. urls: message.urls,
  24. mentions: message.mentions,
  25. };
  26. }
  27.  
  28. const createTaskAndSaveToDb = (messageObj) => {
  29. let message = buildMessage(messageObj);
  30. new Task(message).save((err, message) => {
  31. (err) && console.log(err);
  32.  
  33. });
  34. }
  35.  
  36. const findMessageById = (createTaskAndSaveToDb, messageObj, index, callback) => {
  37. Task.find({ messageId: messageObj.id }, (err, message) => {
  38. (err) && console.log(err);
  39. // console.log(message);
  40. if(message.length === 0){
  41. console.log( `${index} it is no message in db ${messageObj.id}`)
  42. createTaskAndSaveToDb(messageObj, callback);
  43. } else {
  44. console.log(`${index} message already exist ${messageObj.id}`)
  45. }
  46. }).limit(1);
  47. }
  48.  
  49. const getData = (response, callback) => {
  50. let messages = response;
  51. if(messages.length) {
  52. messages.forEach((messageObj, index) => {
  53. findMessageById(createTaskAndSaveToDb, messageObj, index, callback);
  54. });
  55. }
  56. }
  57.  
  58. const promises = [];
  59.  
  60. const request = (serverResult, callbackGetData, beforeOrAfter, id, doneCb) => {
  61. let numberOfMessages = 100;
  62. let url = api.getUrlToMessages(numberOfMessages, beforeOrAfter, id);
  63. fetch(url)
  64. .then(res => {
  65. res.json().then(response => {
  66. if(response.length == 0){ //corner case: if count of messages is XX00 aka 3500
  67. console.log(`response retrieve empty array - ${response}\r\n======================finished!========================`);
  68. }
  69. else {
  70. var oldestMessageId = response[0].id;
  71. Task.find({ messageId: oldestMessageId }, (err, message) => {
  72. (err) && console.log(err);
  73.  
  74. // callbackGetData(response);
  75.  
  76. if(message.length === 1){ //if oldest message in response already in db
  77. callbackGetData(response); //save messages only if it is new and filter old by each "find"
  78. returnJsonResult (serverResult, beforeOrAfter);
  79. } else { //if NO message in db
  80.  
  81. if(response.length == numberOfMessages) {
  82. promises.push(Task.insertMany(response)) // insert promise into array and move further
  83. request(serverResult, callbackGetData, beforeOrAfter, oldestMessageId, doneCb); // fetch again
  84. }
  85. else {
  86. promises.push(Task.insertMany(response))
  87. Promise.all(promises).then(()=> returnJsonResult(serverResult, beforeOrAfter));
  88. }
  89. }
  90. });
  91. }
  92. });
  93. })
  94. .catch(error => {
  95. console.log(error);
  96. });
  97. }
  98.  
  99. function returnJsonResult (serverResult, beforeOrAfter) {
  100. if(serverResult) {
  101. Task.count({}, function( err, count){
  102. (err) && serverResult.send(err);
  103. serverResult.json({type: beforeOrAfter, count: count, status: 'finished!'});
  104. });
  105. }
  106. console.log("======================finished!========================");
  107. }
Add Comment
Please, Sign In to add comment