123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- "use strict";
- let RedisModel = require('./../redis.model.js');
- let ModelUtil = require('../../util/model.util');
- let RedisClient = require('../../repository/redis/redis.client.js');
- let SearchRepo = require('../../repository/mysql/search.repo');
- let log = require('../../util/log.js');
- let async = require("async");
- let redis = RedisClient.redisClient().connection;
- const REDIS_KEYS = require('../../include/commons').REDIS_KEYS;
- const DB_TABLES = require('../../include/commons').DB_TABLES;
- class ObjectSearcher extends RedisModel {
- constructor() {
- super();
- }
- search(userId, keyword, targetRole, entityType, excludeTopicEndedSessions, page, size) {
- let self = this;
- async.waterfall([
- // 获取会话ID列表,根据参数过滤应该议题已结束的会话
- function (callback) {
- if (excludeTopicEndedSessions=="true") {
- SearchRepo.findTopicEndedSessionIdList(userId, function (err, sessionIdList) {
- if (err) return callback(err, null);
- callback(null, sessionIdList, keyword, targetRole, entityType);
- })
- }else if(excludeTopicEndedSessions=="false"){
- SearchRepo.findTopicActiveSessionIdList(userId, function (err, sessionIdList) {
- if (err) return callback(err, null);
- callback(null, sessionIdList, keyword, targetRole, entityType);
- })
- }else {
- redis.zrangeAsync(RedisModel.makeRedisKey(REDIS_KEYS.UserSessions, userId), 0, -1)
- .then(function (sessionIdList) {
- callback(null, sessionIdList, keyword, targetRole, entityType);
- })
- .catch(function (err) {
- return callback(err, null);
- });
- }
- },
- function (sessionIdList, keyword, targetRole, entityType, callback) {
- var sessionList=[];
- for(var j in sessionIdList){
- sessionList.push(sessionIdList[j].id||sessionIdList[j]);
- }
- if(sessionList.length==0){
- callback(null, "");
- return;
- }
- if (targetRole !== 'doctor' && targetRole !== 'patient') {
- ModelUtil.emitError(self.eventEmitter, "Unknown target role: " + targetRole);
- }
- let userTable = targetRole === 'doctor' ? DB_TABLES.Doctors : DB_TABLES.Patients;
- // 综合搜索与分类搜索
- if (entityType === 'all') {
- SearchRepo.searchAll(sessionList,userId, keyword, userTable, function (err, res) {
- if (err) return callback(err, null);
- callback(null, res);
- });
- } else if (entityType === 'user') {
- SearchRepo.searchUser(sessionList,userId, keyword, userTable, page, size, function (err, res) {
- if (err) return callback(err, null);
- callback(null, {users: SearchRepo.userForge(res)});
- });
- } else if (entityType === 'session') {
- SearchRepo.searchSessions(sessionList,userId, keyword, page, size, function (err, res) {
- if (err) return callback(err, null);
- callback(null, {sessions: SearchRepo.sessionForge(res, keyword)});
- });
- } else if (entityType === 'message') {
- SearchRepo.searchMessages(sessionList,userId, keyword, page, size, function (err, res) {
- if (err) return callback(err, null);
- callback(null, {messages: SearchRepo.messageForge(res)});
- });
- } else {
- callback(new Error("Unknown entity type: " + entityType), null);
- }
- }
- ],
- function (err, res) {
- if (err) {
- return ModelUtil.emitError(self.eventEmitter, "Search failed", err);
- }
- ModelUtil.emitOK(self.eventEmitter, res);
- });
- }
- }
- module.exports = ObjectSearcher;
|