Просмотр исходного кода

Merge pull request #4400 from weseek/feat/77797-get-seenUsers

Feat: 77797 get seen users
Sizma yosimaz 4 лет назад
Родитель
Сommit
2f356ca53e

+ 3 - 0
packages/app/resource/search/mappings.json

@@ -74,6 +74,9 @@
         "bookmark_count": {
         "bookmark_count": {
           "type": "integer"
           "type": "integer"
         },
         },
+        "seenUsers_count":{
+          "type": "integer"
+        },
         "like_count": {
         "like_count": {
           "type": "integer"
           "type": "integer"
         },
         },

+ 3 - 1
packages/app/src/server/events/page.js

@@ -18,5 +18,7 @@ PageEvent.prototype.onUpdate = function(page, user) {
 PageEvent.prototype.onCreateMany = function(pages, user) {
 PageEvent.prototype.onCreateMany = function(pages, user) {
   debug('onCreateMany event fired');
   debug('onCreateMany event fired');
 };
 };
-
+PageEvent.prototype.onAddSeenUsers = function(pages, user) {
+  debug('onAddSeenUsers event fired');
+};
 module.exports = PageEvent;
 module.exports = PageEvent;

+ 2 - 0
packages/app/src/server/models/page.js

@@ -288,6 +288,7 @@ module.exports = function(crowi) {
     pageEvent.on('create', pageEvent.onCreate);
     pageEvent.on('create', pageEvent.onCreate);
     pageEvent.on('update', pageEvent.onUpdate);
     pageEvent.on('update', pageEvent.onUpdate);
     pageEvent.on('createMany', pageEvent.onCreateMany);
     pageEvent.on('createMany', pageEvent.onCreateMany);
+    pageEvent.on('addSeenUsers', pageEvent.onAddSeenUsers);
   }
   }
 
 
   function validateCrowi() {
   function validateCrowi() {
@@ -413,6 +414,7 @@ module.exports = function(crowi) {
     const saved = await this.save();
     const saved = await this.save();
 
 
     debug('seenUsers updated!', added);
     debug('seenUsers updated!', added);
+    pageEvent.emit('addSeenUsers', saved);
 
 
     return saved;
     return saved;
   };
   };

+ 1 - 0
packages/app/src/server/service/page.js

@@ -25,6 +25,7 @@ class PageService {
     this.pageEvent.on('create', this.pageEvent.onCreate);
     this.pageEvent.on('create', this.pageEvent.onCreate);
     this.pageEvent.on('update', this.pageEvent.onUpdate);
     this.pageEvent.on('update', this.pageEvent.onUpdate);
     this.pageEvent.on('createMany', this.pageEvent.onCreateMany);
     this.pageEvent.on('createMany', this.pageEvent.onCreateMany);
+    this.pageEvent.on('addSeenUsers', this.pageEvent.onAddSeenUsers);
   }
   }
 
 
   /**
   /**

+ 4 - 2
packages/app/src/server/service/search-delegator/elasticsearch.js

@@ -309,6 +309,7 @@ class ElasticsearchDelegator {
     };
     };
 
 
     const bookmarkCount = page.bookmarkCount || 0;
     const bookmarkCount = page.bookmarkCount || 0;
+    const seenUsersCount = page.seenUsers.length || 0;
     let document = {
     let document = {
       path: page.path,
       path: page.path,
       body: page.revision.body,
       body: page.revision.body,
@@ -316,6 +317,7 @@ class ElasticsearchDelegator {
       username: page.creator != null ? page.creator.username : null,
       username: page.creator != null ? page.creator.username : null,
       comment_count: page.commentCount,
       comment_count: page.commentCount,
       bookmark_count: bookmarkCount,
       bookmark_count: bookmarkCount,
+      seenUsers_count: seenUsersCount,
       like_count: page.liker.length || 0,
       like_count: page.liker.length || 0,
       created_at: page.createdAt,
       created_at: page.createdAt,
       updated_at: page.updatedAt,
       updated_at: page.updatedAt,
@@ -563,7 +565,7 @@ class ElasticsearchDelegator {
 
 
   createSearchQuerySortedByUpdatedAt(option) {
   createSearchQuerySortedByUpdatedAt(option) {
     // getting path by default is almost for debug
     // getting path by default is almost for debug
-    let fields = ['path', 'bookmark_count', 'comment_count', 'updated_at', 'tag_names'];
+    let fields = ['path', 'bookmark_count', 'comment_count', 'seenUsers_count', 'updated_at', 'tag_names'];
     if (option) {
     if (option) {
       fields = option.fields || fields;
       fields = option.fields || fields;
     }
     }
@@ -584,7 +586,7 @@ class ElasticsearchDelegator {
   }
   }
 
 
   createSearchQuerySortedByScore(option) {
   createSearchQuerySortedByScore(option) {
-    let fields = ['path', 'bookmark_count', 'comment_count', 'updated_at', 'tag_names'];
+    let fields = ['path', 'bookmark_count', 'comment_count', 'seenUsers_count', 'updated_at', 'tag_names'];
     if (option) {
     if (option) {
       fields = option.fields || fields;
       fields = option.fields || fields;
     }
     }

+ 1 - 0
packages/app/src/server/service/search.js

@@ -68,6 +68,7 @@ class SearchService {
     pageEvent.on('delete', this.delegator.syncPageDeleted.bind(this.delegator));
     pageEvent.on('delete', this.delegator.syncPageDeleted.bind(this.delegator));
     pageEvent.on('updateMany', this.delegator.syncPagesUpdated.bind(this.delegator));
     pageEvent.on('updateMany', this.delegator.syncPagesUpdated.bind(this.delegator));
     pageEvent.on('syncDescendants', this.delegator.syncDescendantsPagesUpdated.bind(this.delegator));
     pageEvent.on('syncDescendants', this.delegator.syncDescendantsPagesUpdated.bind(this.delegator));
+    pageEvent.on('addSeenUsers', this.delegator.syncPageUpdated.bind(this.delegator));
 
 
     const bookmarkEvent = this.crowi.event('bookmark');
     const bookmarkEvent = this.crowi.event('bookmark');
     bookmarkEvent.on('create', this.delegator.syncBookmarkChanged.bind(this.delegator));
     bookmarkEvent.on('create', this.delegator.syncBookmarkChanged.bind(this.delegator));