فهرست منبع

Add session id SessionData

John R. Supplee 4 سال پیش
والد
کامیت
9b6288e49c
3فایلهای تغییر یافته به همراه32 افزوده شده و 5 حذف شده
  1. 9 2
      client/components/main/globalSearch.js
  2. 19 0
      models/usersessiondata.js
  3. 4 3
      server/publications/cards.js

+ 9 - 2
client/components/main/globalSearch.js

@@ -98,7 +98,10 @@ BlazeComponent.extendComponent({
     // eslint-disable-next-line no-console
     // console.log('getting results');
     if (this.queryParams) {
-      const sessionData = SessionData.findOne({ userId: Meteor.userId() });
+      const sessionData = SessionData.findOne({
+        userId: Meteor.userId(),
+        sessionId: SessionData.getSessionId(),
+      });
       const cards = Cards.find({ _id: { $in: sessionData.cards } });
       this.queryErrors = sessionData.errorMessages;
       // eslint-disable-next-line no-console
@@ -310,7 +313,11 @@ BlazeComponent.extendComponent({
     this.queryParams = params;
 
     this.autorun(() => {
-      const handle = subManager.subscribe('globalSearch', params);
+      const handle = subManager.subscribe(
+        'globalSearch',
+        SessionData.getSessionId(),
+        params,
+      );
       Tracker.nonreactive(() => {
         Tracker.autorun(() => {
           // eslint-disable-next-line no-console

+ 19 - 0
models/usersessiondata.js

@@ -25,6 +25,13 @@ SessionData.attachSchema(
       type: String,
       optional: false,
     },
+    sessionId: {
+      /**
+       * unique session ID
+       */
+      type: String,
+      optional: false,
+    },
     totalHits: {
       /**
        * total number of hits in the last report query
@@ -78,4 +85,16 @@ SessionData.attachSchema(
   }),
 );
 
+if (!Meteor.isServer) {
+  SessionData.getSessionId = () => {
+    let sessionId = Session.get('sessionId');
+    if (!sessionId) {
+      sessionId = `${String(Meteor.userId())}-${String(Math.random())}`;
+      Session.set('sessionId', sessionId);
+    }
+
+    return sessionId;
+  };
+}
+
 export default SessionData;

+ 4 - 3
server/publications/cards.js

@@ -173,7 +173,8 @@ Meteor.publish('dueCards', function(allUsers = false) {
   ];
 });
 
-Meteor.publish('globalSearch', function(queryParams) {
+Meteor.publish('globalSearch', function(sessionId, queryParams) {
+  check(sessionId, String);
   check(queryParams, Object);
 
   // eslint-disable-next-line no-console
@@ -199,7 +200,7 @@ Meteor.publish('globalSearch', function(queryParams) {
     });
   }
 
-  SessionData.upsert({ userId: this.userId }, update);
+  SessionData.upsert({ userId: this.userId, sessionId }, update);
 
   const boards = [];
   const swimlanes = [];
@@ -236,7 +237,7 @@ Meteor.publish('globalSearch', function(queryParams) {
     Swimlanes.find({ _id: { $in: swimlanes } }, { fields }),
     Lists.find({ _id: { $in: lists } }, { fields }),
     Users.find({ _id: { $in: users } }, { fields: Users.safeFields }),
-    SessionData.find({ userId: this.userId }),
+    SessionData.find({ userId: this.userId, sessionId }),
   ];
 
   if (cards) {