瀏覽代碼

议题列表获取

8 年之前
父節點
當前提交
dd09dea8ca

+ 11 - 0
src/server/endpoints/v2/topic.endpoint.js

@ -28,6 +28,17 @@ router.get(APIv2.Sessions.Topics, function (req, res) {
    topic.getTopicMessages(topicId);
});
router.get(APIv2.Sessions.TopicList, function (req, res) {
    let user = req.query.user;
    let status = req.query.status;
    let type = req.query.type;//SESSION_TYPES
    let topic = new Topics();
    ControllerUtil.regModelEventHandler(topic, res);
    topic.getTopics(user,status,type);
});
router.post(APIv2.Sessions.Topics, function (req, res) {
    let payload = req.body;
    let testing = ObjectUtil.fieldsCheck(payload, "topic_id", "topic_name", "participants", "messages", "session_id", "session_type");

+ 1 - 0
src/server/include/endpoints.js

@ -33,6 +33,7 @@ const APIv2 = {
        Topics: '/:session_id/topics',
        Topic: '/:session_id/topics/:topic_id',                          // 议题,指定ID的议题将返回其信息
        TopicEnded: '/:session_id/topics/:topic_id/ended',              // 议题是否已结束,若top_id为current,则检查最后一个议题的状态
        TopicList:'/topics',
        Messages: '/:session_id/messages',                              // 会话消息
        MessagesByTopic: '/:session_id/topics/:topic_id/messages',      // 议题消息

+ 50 - 4
src/server/models/sessions/topics.js

@ -5,6 +5,8 @@
let RedisClient = require('../../repository/redis/redis.client.js');
let TopicsRepo = require('../../repository/mysql/topics.repo');
let SessionRepo = require('../../repository/mysql/session.repo');
let ParticipantRepo = require('../../repository/mysql/participant.repo');
let RedisModel = require('./../redis.model.js');
let ModelUtil = require('../../util/model.util');
let Participants = require("./participants");
@ -24,10 +26,54 @@ class Topics extends RedisModel {
        super();
    }
    getTopics(user){
    getTopics(user,status,sessionType){
        let self = this;
        if(!sessionType) sessionType = SESSION_TYPES.MUC;
        SessionRepo.findAllByType(user,sessionType,function(err,res){
            if(err){
                ModelUtil.emitError(self.eventEmitter, "获取列表失败"+err);
            }else if(res&&res.length==0){
                ModelUtil.emitOK(self.eventEmitter, []);
            }
            var sessionIds=[];
            for(var j in res){
                sessionIds.push(res[j].id);
            }
            var test = new Map();
            TopicsRepo.findAllBySessionIdsAndStatus(sessionIds,status,function(err,res){
                if(err){
                    ModelUtil.emitError(self.eventEmitter, "获取列表失败"+err);
                }
                else if(res&&res.length==0){
                    ModelUtil.emitOK(self.eventEmitter, []);
                }else{
                    for(var j = 0;j<res.length;j++){
                        callGetImg(j,res,res[j]);
                    }
                }
                var result =[];
                function callGetImg(j,res,r){
                    ParticipantRepo.findAll(res[j].session_id,function(err,p){
                        if(err){
                              log.error("获取头像失败:"+err);
                        }else{
                            r.create_time =   r.create_time.getTime();
                            for(var j in p){
                                if(p[j].is_patient){
                                    r.avatar = p[j].avatar;
                                    r.patient = p[j].id;
                                    r.patient_name = p[j].name;
                                }
                            }
                            result.push(r);
                            if(result.length==res.length){
                                ModelUtil.emitOK(self.eventEmitter, res);
                            }
                        }
                    })
                }
            })
        })
    }
    /**

+ 17 - 0
src/server/repository/mysql/session.repo.js

@ -44,6 +44,23 @@ class SessionRepo {
        });
    }
    /**
     * 获取用户全部会话
     *
     * @param userId
     * @param handler
     */
    static findAllByType(userId,type, handler) {
        let sql = "select session_id from " + DB_TABLES.Participants + " w where w.participant_id = ? and type=? group by w.session_id";
        let sessionSQL = "select id, name, type, create_date, last_sender_id, last_sender_name, last_content_type, last_content, last_message_time from "
            + DB_TABLES.Sessions + " s where s.id in(" + sql + ")";
        ImDb.execQuery({
            "sql": sessionSQL,
            "args": [userId,type],
            "handler": handler
        });
    }
    /**
     * 获取用户置顶会话
     *

+ 14 - 0
src/server/repository/mysql/topics.repo.js

@ -71,6 +71,20 @@ class TopicRepo {
        });
    }
    static findAllBySessionIdsAndStatus(sessionIds,status,handler){
        let sql = "select id, session_id, name, create_time, end_by, end_time," +
            " start_message_id, end_message_id, description, status from " + DB_TABLES.Topics + " where session_id in ('"+sessionIds+"') and status in ("+status+") order by status desc";
        ImDb.execQuery({
            sql: sql,
            args: [],
            handler: handler
        });
    }
    /**
     * 保存议题
     *