|  | @ -11,6 +11,8 @@ let Users = require('../user/users');
 | 
	
		
			
				|  |  | let Participants = require('./Participants');
 | 
	
		
			
				|  |  | let SessionRepo = require('../../repository/mysql/session.repo');
 | 
	
		
			
				|  |  | let ParticipantRepo = require('../../repository/mysql/participant.repo');
 | 
	
		
			
				|  |  | let MessageRepo = require('../../repository/mysql/message.repo');
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | let WechatClient = require("../client/wechat.client.js");
 | 
	
		
			
				|  |  | let AppClient = require("../client/app.client.js");
 | 
	
		
			
				|  |  | 
 | 
	
	
		
			
				|  | @ -46,85 +48,208 @@ class Sessions extends RedisModel {
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     createSession(sessionId, name, type, participantArray, handler) {
 | 
	
		
			
				|  |  |         let self = this;
 | 
	
		
			
				|  |  |         let messageId = mongoose.Types.ObjectId().toString();
 | 
	
		
			
				|  |  |         //创建session到mysql
 | 
	
		
			
				|  |  |         self.createSessionToMysql(sessionId, name, type, participantArray,messageId,function(err,res){
 | 
	
		
			
				|  |  |             if(err){
 | 
	
		
			
				|  |  |                 logger.error(err);
 | 
	
		
			
				|  |  |             }else{
 | 
	
		
			
				|  |  |                 logger.info("create session to mysql success :" +JSON.stringify(res));
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         });
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //创建session到redis
 | 
	
		
			
				|  |  |         self.createSessionToRedis(sessionId, name, type, participantArray,messageId, function(err,res){
 | 
	
		
			
				|  |  |             if(err){
 | 
	
		
			
				|  |  |                 if(handler){handler(err,null);return;};
 | 
	
		
			
				|  |  |                 ModelUtil.emitError(self.eventEmitter, {message:err}, null);
 | 
	
		
			
				|  |  |             }else{
 | 
	
		
			
				|  |  |                 if(handler){handler(null,res);return;};
 | 
	
		
			
				|  |  |                 ModelUtil.emitOK(self.eventEmitter,res);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         });
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 创建会话。REDIS
 | 
	
		
			
				|  |  |      * @param sessionId
 | 
	
		
			
				|  |  |      * @param name
 | 
	
		
			
				|  |  |      * @param type
 | 
	
		
			
				|  |  |      * @param participantArray
 | 
	
		
			
				|  |  |      * @param messageId
 | 
	
		
			
				|  |  |      * @param handler
 | 
	
		
			
				|  |  |      * @returns {boolean}
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     createSessionToRedis(sessionId, name, type, participantArray,messageId, handler){
 | 
	
		
			
				|  |  |         let self = this;
 | 
	
		
			
				|  |  |         let messages = new Messages();
 | 
	
		
			
				|  |  |         var participantIdArray = [];
 | 
	
		
			
				|  |  |         for (let i in participantArray) {
 | 
	
		
			
				|  |  |             participantIdArray.push(participantArray[i].split(":")[0]);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (type == SESSION_TYPES.P2P||type==SESSION_TYPES.SYSTEM) {
 | 
	
		
			
				|  |  |             var participantIdArray = [];
 | 
	
		
			
				|  |  |             for (let i in participantArray) {
 | 
	
		
			
				|  |  |                 participantIdArray.push(participantArray[i].split(":")[0]);
 | 
	
		
			
				|  |  |             if(sessionId){
 | 
	
		
			
				|  |  |                 callBusinessType(sessionId);
 | 
	
		
			
				|  |  |                 return;
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             if (participantIdArray.length != 2) {
 | 
	
		
			
				|  |  |                 ModelUtil.emitDataNotFound(self.eventEmitter, {message: "P2P session only allow 2 participants."});
 | 
	
		
			
				|  |  |                 handler("P2P session only allow 2 participants.",null);
 | 
	
		
			
				|  |  |                 return false;
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             ParticipantRepo.findSessionIdByParticipantIds(participantIdArray[0], participantIdArray[1], function (err, res) {
 | 
	
		
			
				|  |  |                 sessionId = res;
 | 
	
		
			
				|  |  |                 callBusinessType(sessionId);
 | 
	
		
			
				|  |  |             });
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             if(!sessionId){
 | 
	
		
			
				|  |  |                 handler("MUC OR GROUP session sessionId is not  allow null .",null);
 | 
	
		
			
				|  |  |                 return;
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             callBusinessType(sessionId);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         var businessType = SESSION_BUSINESS_TYPE.DOCTOR;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         function callBusinessType(sessionId) {
 | 
	
		
			
				|  |  |             for (var j = 0; j < participantArray.length; j++)
 | 
	
		
			
				|  |  |                 callIsPatient(j, participantArray.length);
 | 
	
		
			
				|  |  |             ParticipantRepo.getBusinessType(participantIdArray.join("','"),function(err,businessType){
 | 
	
		
			
				|  |  |                 callCreate(sessionId, businessType);
 | 
	
		
			
				|  |  |             });
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         function callIsPatient(j, length) {
 | 
	
		
			
				|  |  |             Users.isPatientId(participantArray[j], function (isPatient) {
 | 
	
		
			
				|  |  |                 if (isPatient) {
 | 
	
		
			
				|  |  |                     businessType = SESSION_BUSINESS_TYPE.PATIENT
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 if (length - 1 == j || businessType == SESSION_BUSINESS_TYPE.PATIENT) {
 | 
	
		
			
				|  |  |                     callCreate(sessionId, businessType);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |         function callCreate(sessionId, businessType) {
 | 
	
		
			
				|  |  |             let createDate = new Date();
 | 
	
		
			
				|  |  |             let sessionKey = RedisModel.makeRedisKey(REDIS_KEYS.Session, sessionId);
 | 
	
		
			
				|  |  |             let message = {
 | 
	
		
			
				|  |  |                 sender_id: "system",
 | 
	
		
			
				|  |  |                 sender_name: "system",
 | 
	
		
			
				|  |  |                 content_type: 6,
 | 
	
		
			
				|  |  |                 content: "会话创建成功",
 | 
	
		
			
				|  |  |                 timestamp: createDate,
 | 
	
		
			
				|  |  |                 id:messageId
 | 
	
		
			
				|  |  |             };
 | 
	
		
			
				|  |  |             let session = {
 | 
	
		
			
				|  |  |                 id :sessionId,
 | 
	
		
			
				|  |  |                 name:name,
 | 
	
		
			
				|  |  |                 type:type,
 | 
	
		
			
				|  |  |                 create_date:createDate.getTime(),
 | 
	
		
			
				|  |  |                 business_type:businessType,
 | 
	
		
			
				|  |  |                 last_sender_id : message.sender_id,
 | 
	
		
			
				|  |  |                 last_sender_name : message.sender_name,
 | 
	
		
			
				|  |  |                 last_message_time: message.timestamp.getTime(),
 | 
	
		
			
				|  |  |                 last_content  : message.content,
 | 
	
		
			
				|  |  |                 last_content_type : message.content_type
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             redis.hmsetAsync(sessionKey, session).then(function(){
 | 
	
		
			
				|  |  |                 Participants.saveParticipantsToRedis(sessionId, participantArray, createDate, function (res) {
 | 
	
		
			
				|  |  |                     handler(null, session);
 | 
	
		
			
				|  |  |                     messages.saveMessageToRedisFromCreateSession(sessionId, messageId, message);
 | 
	
		
			
				|  |  |                 });
 | 
	
		
			
				|  |  |             })
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 创建会话。mysql
 | 
	
		
			
				|  |  |      * @param sessionId
 | 
	
		
			
				|  |  |      * @param name
 | 
	
		
			
				|  |  |      * @param type
 | 
	
		
			
				|  |  |      * @param participantArray
 | 
	
		
			
				|  |  |      * @param messageId
 | 
	
		
			
				|  |  |      * @param handler
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     createSessionToMysql(sessionId, name, type, participantArray,messageId, handler){
 | 
	
		
			
				|  |  |         let self = this;
 | 
	
		
			
				|  |  |         //如果sessionId不存在则执行创建sessionId过程
 | 
	
		
			
				|  |  |         var participantIdArray = [];
 | 
	
		
			
				|  |  |         for (let i in participantArray) {
 | 
	
		
			
				|  |  |             participantIdArray.push(participantArray[i].split(":")[0]);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         //流程1-判断是否存在sessionId不存在则创建对应的sessionId;
 | 
	
		
			
				|  |  |         if(!sessionId){
 | 
	
		
			
				|  |  |             if (type == SESSION_TYPES.P2P||type==SESSION_TYPES.SYSTEM) {
 | 
	
		
			
				|  |  |                 ParticipantRepo.findSessionIdByParticipantIds(participantIdArray[0], participantIdArray[1], function (err, res) {
 | 
	
		
			
				|  |  |                     sessionId = res;
 | 
	
		
			
				|  |  |                     callBusinessType();
 | 
	
		
			
				|  |  |                 });
 | 
	
		
			
				|  |  |             }else{
 | 
	
		
			
				|  |  |                 handler("MUC模式和团队模式,不允许sessionId为空!",null);
 | 
	
		
			
				|  |  |                 return;
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }else{
 | 
	
		
			
				|  |  |             callBusinessType();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //流程2-判断session的业务类型;
 | 
	
		
			
				|  |  |         function callBusinessType(){
 | 
	
		
			
				|  |  |             ParticipantRepo.getBusinessType(participantIdArray.join("','"),function(err,businessType){
 | 
	
		
			
				|  |  |                 if(err){handler(err,null);return;}
 | 
	
		
			
				|  |  |                 callCreateSession(businessType);
 | 
	
		
			
				|  |  |             });
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         function callCreate(sessionId, businessType) {
 | 
	
		
			
				|  |  |         //流程3-发起session创建 返回session实例
 | 
	
		
			
				|  |  |         function callCreateSession(businessType){
 | 
	
		
			
				|  |  |             //查找该sessionId是否存在存在则直接返回实例
 | 
	
		
			
				|  |  |             SessionRepo.findOne(sessionId, function (err, res) {
 | 
	
		
			
				|  |  |                 if (res.length > 0) {
 | 
	
		
			
				|  |  |                     let session = res[0];
 | 
	
		
			
				|  |  |                     ModelUtil.emitOK(self.eventEmitter, {
 | 
	
		
			
				|  |  |                         id: session.id,
 | 
	
		
			
				|  |  |                         name: session.name,
 | 
	
		
			
				|  |  |                         type: session.type,
 | 
	
		
			
				|  |  |                         business_type: session.business_type || businessType,
 | 
	
		
			
				|  |  |                         create_date: session.create_date
 | 
	
		
			
				|  |  |                     });
 | 
	
		
			
				|  |  |                     return;
 | 
	
		
			
				|  |  |                 if (res.length > 0) {//已经存在
 | 
	
		
			
				|  |  |                     handler(null,res[0]);
 | 
	
		
			
				|  |  |                 }else{
 | 
	
		
			
				|  |  |                     let createDate = new Date();
 | 
	
		
			
				|  |  |                     let session ={
 | 
	
		
			
				|  |  |                         id :sessionId,
 | 
	
		
			
				|  |  |                         name:name,
 | 
	
		
			
				|  |  |                         type:type,
 | 
	
		
			
				|  |  |                         create_date:createDate.getTime(),
 | 
	
		
			
				|  |  |                         business_type:businessType
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     //将session写入数据库
 | 
	
		
			
				|  |  |                     self.saveSessionToMysql(sessionId, name, type, createDate, businessType, function (err, res) {
 | 
	
		
			
				|  |  |                         if(err){handler(err,null);return;};
 | 
	
		
			
				|  |  |                         callCreateParticipants(session);
 | 
	
		
			
				|  |  |                     })
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             });
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 let createDate = new Date();
 | 
	
		
			
				|  |  |                 let sessionKey = RedisModel.makeRedisKey(REDIS_KEYS.Session, sessionId);
 | 
	
		
			
				|  |  |         //流程4-发起session成员创建
 | 
	
		
			
				|  |  |         function callCreateParticipants(session){
 | 
	
		
			
				|  |  |             Participants.saveParticipantsToMysql(sessionId, participantArray, function (err, res) {
 | 
	
		
			
				|  |  |                 if(err){handler(err,null);return;};
 | 
	
		
			
				|  |  |                 callBeginTrans(session);
 | 
	
		
			
				|  |  |             })
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 // 保存会话及成员至MySQL中
 | 
	
		
			
				|  |  |                 self.saveSessionToMysql(sessionId, name, type, createDate, businessType, function (err, res) {
 | 
	
		
			
				|  |  |                     Participants.saveParticipantsToMysql(sessionId, participantArray, function (err, res) {
 | 
	
		
			
				|  |  |                         if (err) {
 | 
	
		
			
				|  |  |                             ModelUtil.emitError(self.eventEmitter, err.message);
 | 
	
		
			
				|  |  |                             return;
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         let message = {
 | 
	
		
			
				|  |  |                             sender_id: "System",
 | 
	
		
			
				|  |  |                             sender_name: "System",
 | 
	
		
			
				|  |  |                             content_type: 1,
 | 
	
		
			
				|  |  |                             content: "",
 | 
	
		
			
				|  |  |                             timestamp: createDate
 | 
	
		
			
				|  |  |                         };
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                         Messages.updateLastContent(sessionKey, type, name, message);
 | 
	
		
			
				|  |  |                         Participants.saveParticipantsToRedis(sessionId, participantArray, createDate, function (res) {
 | 
	
		
			
				|  |  |                             if (handler) {
 | 
	
		
			
				|  |  |                                 handler(true, sessionId);
 | 
	
		
			
				|  |  |                             } else {
 | 
	
		
			
				|  |  |                                 ModelUtil.emitOK(self.eventEmitter, {id: sessionId});
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         });
 | 
	
		
			
				|  |  |         //流程5-发起session会话
 | 
	
		
			
				|  |  |         function callBeginTrans(session) {
 | 
	
		
			
				|  |  |             let mesDate = new Date();
 | 
	
		
			
				|  |  |             let message = {
 | 
	
		
			
				|  |  |                 sender_id: "system",
 | 
	
		
			
				|  |  |                 sender_name: "system",
 | 
	
		
			
				|  |  |                 content_type: 6,
 | 
	
		
			
				|  |  |                 content: "会话创建成功",
 | 
	
		
			
				|  |  |                 timestamp: mesDate,
 | 
	
		
			
				|  |  |                 id:messageId
 | 
	
		
			
				|  |  |             };
 | 
	
		
			
				|  |  |             session.last_sender_id = message.sender_id;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             session.last_sender_name = message.sender_name;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             session.last_message_time = mesDate.getTime();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             session.last_content  = message.content;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             session.last_content_type = message.content_type;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             MessageRepo.save(message,type,messageId,sessionId,function(err,res){
 | 
	
		
			
				|  |  |                 SessionRepo.updateSessionLastStatus(message.sender_id,
 | 
	
		
			
				|  |  |                     message.sender_name,
 | 
	
		
			
				|  |  |                     message.timestamp,
 | 
	
		
			
				|  |  |                     message.content,
 | 
	
		
			
				|  |  |                     message.content_type,
 | 
	
		
			
				|  |  |                     sessionId, function (err, res) {
 | 
	
		
			
				|  |  |                         if (err) {handler(err,null);return;};
 | 
	
		
			
				|  |  |                         handler(null,session);
 | 
	
		
			
				|  |  |                     });
 | 
	
		
			
				|  |  |                 });
 | 
	
		
			
				|  |  |             });
 | 
	
		
			
				|  |  |             })
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
	
		
			
				|  | @ -230,7 +355,6 @@ class Sessions extends RedisModel {
 | 
	
		
			
				|  |  |                                     })
 | 
	
		
			
				|  |  |                                 }).catch(function (err) {
 | 
	
		
			
				|  |  |                                     logger.error("Get sessions failed: ", ex);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                                     ModelUtil.emitError(self.eventEmitter, "Get sessions failed: " + err);
 | 
	
		
			
				|  |  |                                 });
 | 
	
		
			
				|  |  |                 });
 | 
	
	
		
			
				|  | @ -238,6 +362,9 @@ class Sessions extends RedisModel {
 | 
	
		
			
				|  |  |         ]);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取会话消息。全部,不管已读/未读状态。
 | 
	
		
			
				|  |  |      *
 | 
	
	
		
			
				|  | @ -548,6 +675,7 @@ class Sessions extends RedisModel {
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         });
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     sendTopicMessages(topicId,message){
 | 
	
		
			
				|  |  |         let self = this;
 | 
	
		
			
				|  |  |         let topicKey = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
 | 
	
	
		
			
				|  | @ -555,6 +683,7 @@ class Sessions extends RedisModel {
 | 
	
		
			
				|  |  |             self.saveMessageBySession(topic.session_id,message);
 | 
	
		
			
				|  |  |         })
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 保存消息
 | 
	
		
			
				|  |  |      *
 | 
	
	
		
			
				|  | @ -570,9 +699,7 @@ class Sessions extends RedisModel {
 | 
	
		
			
				|  |  |         let self = this;
 | 
	
		
			
				|  |  |         let sessionType = 0;
 | 
	
		
			
				|  |  |         let sessionName = "";
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         message.id = messageId;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         // 发送成员必须处于会话中
 | 
	
		
			
				|  |  |         participants.existsParticipant(sessionId, message.sender_id, function (err, res) {
 | 
	
		
			
				|  |  |             if (res) {
 | 
	
	
		
			
				|  | @ -587,20 +714,20 @@ class Sessions extends RedisModel {
 | 
	
		
			
				|  |  |                     // 更新消息存储
 | 
	
		
			
				|  |  |                     messages.saveMessageToRedis(sessionId, sessionType, messageId, message);
 | 
	
		
			
				|  |  |                     messages.saveMessageToMysql(sessionId, sessionType, messageId, message);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     // 更新会话最新状态及成员最后一次消息获取时间
 | 
	
		
			
				|  |  |                     Sessions.updateParticipantLastFetchTime(sessionId, message.sender_id, message.timestamp.getTime());
 | 
	
		
			
				|  |  |                     //更新最后一条消息
 | 
	
		
			
				|  |  |                     Messages.updateLastContent(session_key, sessionType, sessionName, message);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     //更新session实体的最后一条消息
 | 
	
		
			
				|  |  |                     SessionRepo.updateSessionLastStatus(message.sender_id,message.sender_name,message.timestamp,message.content,message.content_type,sessionId);
 | 
	
		
			
				|  |  |                     handler(null, messageId);
 | 
	
		
			
				|  |  |                 }).then(function (res) {
 | 
	
		
			
				|  |  |                     // 推送消息
 | 
	
		
			
				|  |  |                     ParticipantRepo.findIds(sessionId, function (err, res) {
 | 
	
		
			
				|  |  |                         if (err) {
 | 
	
		
			
				|  |  |                             ModelUtil.logError("Push message from topic: get participant's id list failed: ", err);
 | 
	
		
			
				|  |  |                             handler(err, messageId)
 | 
	
		
			
				|  |  |                         } else {
 | 
	
		
			
				|  |  |                             message.session_id = sessionId;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                             res.forEach(function (participant) {
 | 
	
		
			
				|  |  |                                 if (participant.id !== message.sender_id) {
 | 
	
		
			
				|  |  |                                     Sessions.pushNotification(participant.id, message);
 | 
	
	
		
			
				|  | @ -609,7 +736,6 @@ class Sessions extends RedisModel {
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     })
 | 
	
		
			
				|  |  |                 }).catch(function (err) {
 | 
	
		
			
				|  |  |                     ModelUtil.emitError(self.eventEmitter, "Error occurred while save message to topic: ");
 | 
	
		
			
				|  |  |                     handler(err, messageId)
 | 
	
		
			
				|  |  |                 })
 | 
	
		
			
				|  |  |             } else {
 | 
	
	
		
			
				|  | @ -709,6 +835,7 @@ class Sessions extends RedisModel {
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         });
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | // Expose class
 |