浏览代码

整理ENDPOINT

Sand 8 年之前
父节点
当前提交
788fc99b52

+ 1 - 3
src/server/app.js

@ -33,9 +33,6 @@ let management = require('./endpoints/management.endpoint');
// handlers
let SocketHandler = require('./handlers/socket.handler');
// schedule
let PushJobLoader = require('./models/schedule/push.job.loader')
// initialize express application
let app = express();
app.set('port', config.serverPort);
@ -63,6 +60,7 @@ app.use(APIv1.Users.Base, users);
app.use(APIv1.Groups.Base, groups);
app.use(APIv1.Management.Base, management);
app.use(APIv1.Sessions.Base,sessions);
// error handler, only handle the sync call exception
app.use(function (err, req, res, next) {
    if (err) {

src/server/endpoints/application.endpoint.js → src/server/endpoints/v1/application.endpoint.js


src/server/endpoints/chats.endpoint.js → src/server/endpoints/v1/chats.endpoint.js


+ 1 - 1
src/server/endpoints/groups.endpoint.js

@ -18,7 +18,7 @@ let Group = require('../models/group');
 *  /groups/:group_id/members?type=1
 */
router.get(APIv1.Groups.Members, function (req, res) {
    var gruopId = req.params.group_id;
    var groupId = req.params.group_id;
    var groupType = req.query.type;
    if(!groupType){

src/server/endpoints/management.endpoint.js → src/server/endpoints/v1/management.endpoint.js


src/server/endpoints/users.endpoint.js → src/server/endpoints/v1/users.endpoint.js


+ 34 - 0
src/server/endpoints/v2/application.endpoint.js

@ -0,0 +1,34 @@
"use strict";
let express = require('express');
let router = express.Router();
const APIv1 = require('../include/endpoints').APIv1;
const MODEL_EVENTS = require('../include/commons').MODEL_EVENTS;
let StatsMessage = require("../models/stats");
/**
 * 获取应用角标数。
 *
 * /application/badge_no?user_id=sand
 *
 * 参数:
 * uid:用户id
 */
router.get(APIv1.Application.BadgeNo, function (req, res) {
    let userId = req.query.user_id;
    let statsMsg = new StatsMessage();
    statsMsg.on(MODEL_EVENTS.OK, function (data) {
        res.status(200).send(data);
    });
    statsMsg.on(MODEL_EVENTS.Error, function (data) {
        res.status(500).send(data);
    });
    statsMsg.getBadgeNumber(userId);
});
module.exports = router;

+ 27 - 0
src/server/endpoints/v2/management.endpoint.js

@ -0,0 +1,27 @@
/**
 * 管理端点。负责数据库,服务器状态等内容反馈。
 */
"use strict";
let express = require('express');
let router = express.Router();
let APIv1 = require('../include/endpoints').APIv1;
let MODEL_EVENTS = require('../include/commons').MODEL_EVENTS;
let Management = require('../models/server/management');
/**
 * 数据库检查,包括所有表,连接状态。
 */
router.get(APIv1.Management.DbStatus, function (req, res) {
    let management = new Management();
    management.on(MODEL_EVENTS.OK, function (data) {
        res.status(200).send(data);
    });
    management.getDatabaseTables();
});
module.exports = router;

src/server/endpoints/session.endpoint.js → src/server/endpoints/v2/session.endpoint.js


+ 108 - 0
src/server/endpoints/v2/user.endpoint.js

@ -0,0 +1,108 @@
/**
 * 用户端点。
 */
"use strict";
let express = require('express');
let router = express.Router();
let http = require('http');
let configFile = require('../include/commons').CONFIG_FILE;
let config = require('../resources/config/' + configFile);
let log = require("../util/log.js");
let ObjectUtil = require('../util/object.util');
let ControllerUtil = require('../util/controller.util');
let Users = require('../models/user/users');
const APIv1 = require('../include/endpoints').APIv1;
/**
 * 登录。用户登录后,更新数据库中的在线状态。
 *
 * 请求URL:
 *  /users/login?user_id=sand&token=0PFWlKmLBN9YzhCfFWVgYA&client_id=H6FYbDejks6VjMmW3uH7V6&platform=0
 *
 * 返回值:
 *  登录后的token.
 *
 * 参数说明:
 *  user_id:用户ID
 *  token:个推的token
 *  client_id:个推的client id
 *  platform:平台类型,0为iOS,1为Android
 */
router.get(APIv1.Users.Login, function (req, res) {
    let userId = req.query.user_id;
    let token = req.query.token;
    let clientId = req.query.client_id;
    let platform = req.query.platform;
    if (userId == null) {
        throw {httpStatus: 406, message: 'Missing field: user_id.'};
    }
    if (token == null) {
        throw {httpStatus: 406, message: 'Missing field: token.'};
    }
    if (clientId == null) {
        throw {httpStatus: 406, message: 'Missing field: client_id.'};
    }
    if (platform == null) {
        throw {httpStatus: 406, message: 'Missing field: platform.'};
    }
    let users = new Users();
    ControllerUtil.regModelEventHandler(users, res);
    users.login(userId, platform, token, clientId);
});
/**
 * 退出。
 *
 * 请求URL:
 *  /users/logout?user_id=sand
 *
 * 参数:
 *  user_id:用户ID
 */
router.get(APIv1.Users.Logout, function (req, res) {
    let userId = req.query.user_id;
    if (userId == null) {
        throw {httpStatus: 406, message: 'Logout Failed. Missing field: user_id.'};
    }
    let userStatus = new Users();
    ControllerUtil.regModelEventHandler(userStatus, res);
    userStatus.logout(userId);
});
/**
 * 更新客户端状态。
 *
 * 请求URL:
 *  /users/:user_id/status
 *
 * POST参数格式:
 *  {status: 1}, app状态,0在后台,1在前台
 */
router.post(APIv1.Users.UserStatus, function (req, res) {
    let userId = req.param('user_id');
    let status = req.body;
    if (!ObjectUtil.isJsonObject(status)) {
        throw {httpStatus: 406, message: "Problems parsing json."};
    }
    if (userId === null || (status.status != 0 && status.status != 1)) {
        throw {httpStatus: 406, message: 'Validation Failed. Missing fields.'};
    }
    let userStatus = new Users();
    ControllerUtil.regModelEventHandler(userStatus, res);
    userStatus.updateStatus(userId, status.status);
});
module.exports = router;

+ 56 - 28
src/server/include/endpoints.js

@ -1,7 +1,5 @@
/**
 * REST API,以端点的形式提供。
 *
 * 若想访问包含页面的内容,请在相应的API后面添加.html。
 * REST API v1,以端点的形式提供。
 */
const APIv1 = {
    Application: {
@ -9,24 +7,23 @@ const APIv1 = {
        BadgeNo: '/badge_no'
    },
    Chats: {
        Base: "/api/v1/chats",
        List: "/list",
        ListWithPatient: "/list/patient",
        ListWithDoctor: "/list/doctor",
        MsgAmount:"/msg/amount",
        MsgAmount: "/msg/amount",
        Recent: '/recent',
        SearchAboutPatient: '/search/patient',
        SearchAboutPatientList:'/search/patient/list',
        SearchAbountPatientMore:'/search/patient/all',
        SearchAboutPatientList: '/search/patient/list',
        SearchAbountPatientMore: '/search/patient/all',
        SearchAboutDoctor: '/search/doctor',
        SearchAboutDoctorList: '/search/doctor/list',
        SearchAbountDoctorContentDetail:'/search/doctor/content/list',
        SearchAbountDoctorContentDetail: '/search/doctor/content/list',
        // 所有未读消息数
        UnreadMsgCount: '/unread_count',
        Message: '/message',                    // 单条消息
        // 私信
@ -44,9 +41,8 @@ const APIv1 = {
        //系统消息
        SM: '/sm',
        TEST:'/test'
        TEST: '/test'
    },
    Users: {
        Base: '/api/v1/users',
@ -56,45 +52,76 @@ const APIv1 = {
        User: '/:user_id',
        UserStatus: '/:user_id/status'
    },
    Groups: {
        Base: '/api/v1/groups',
        Members: '/:group_id/members',
        MembersAvatar: '/member/avatars'
    },
    Management: {
        Base: '/api/v1/management',
        Health: '/health',
        DbStatus: '/db'
    },
    }
};
    Push: {
        Base: '/api/v1/push',
/**
 * REST API v2,以端点的形式提供。
 */
const APIv2 = {
    Application: {
        Base: '/api/v2/application',
        Getui: '/getui'
        BadgeNo: '/badge_no'
    },
    Management: {
        Base: '/api/v2/management',
        Health: '/health',
        DbStatus: '/db'
    },
    Users: {
        Base: '/api/v2/users',
    Sessions:{
        Base:'/api/v1/session',//基础连接
        Login: '/login',
        Logout: '/logout',
        SessionList:'/sessions', //获取会话列表
        User: '/:user_id',
        UserStatus: '/:user_id/status'
    },
    Sessions: {
        Base: '/api/v2/sessions',
        MessageList:'/messages', //获取消息列表
        Session: '/:session_id',
        SessionSticky: '/:session_id/sticky',                           // 会话置顶,置顶使用PUT,取消置顶使用DELETE
        SendMsg:'/send', //发送消息
        RecentSessions: '/recent',                                      // 最近会话,使用类型过滤出'患者'或'医生'会话
        CreateSession:'/create',//创建会话
        Topics: '/:session_id/topics',
        Topic: '/:session_id/topics/:topic_id',                         // 议题,指定ID的议题将返回其信息
        TopicEnded: '/:session_id/topics/:topic_id/ended',              // 议题是否已结束,若top_id为current,则检查最后一个议题的状态
        StickSession:'/stick', //会话置顶
        Messages: '/:session_id/messages',                              // 会话消息
        MessagesByTopic: '/:session_id/topics/:topic_id/messages',      // 议题消息
        Message: '/:session_id/messages/:message_id',                   // 单条消息
        UnStickSession:'/cancelStick',//取消置顶
        SessionsUnreadMessageCount: '/unread_message_count',            // 所有会话的未读消息数
        SessionUnreadMessageCount: '/:session_id/unread_message_count', // 指定会话的未读消息数
        SessionUnreadMessage: '/:session_id/messages/unread',           // 会话未读消息
        PushSessionUser:'/push',//往Session里面push人员
        Participants: '/:session_id/participants',                      // 会话所有成员
        ParticipantsAvatar: '/:session_id/participants/avatars',        // 会话所有成员头像
        Participant: '/:session_id/participants/:participant_id',       // 会话单个成员
        ParticipantAvatar: '/:session_id/participants/:participant_id/avatars'  // 会话单个成员头像
        RemoveSessionUser:'/remove'//将人员从session中移除
        //SendMsg: '/send', //发送消息,使用POST
        //CreateSession: '/create',//创建会话, 使用POST
        //PushSessionUser: '/push',//往Session里面push人员,使用POST
        //RemoveSessionUser: '/remove'//将人员从session中移除,使用DELETE
    },
    Search: {
        Base: '/api/v2/search'                                          // 搜索,语法借鉴ElasticSearch
    }
};
@ -111,4 +138,5 @@ const pages = {
};
module.exports.PAGES = pages;
module.exports.APIv1 = APIv1;
module.exports.APIv1 = APIv1;
module.exports.APIv2 = APIv2;

+ 3 - 4
src/server/models/user/users.js

@ -19,6 +19,7 @@ let SessionRepo = require('../../repository/mysql/session.repo');
let TopicRepo = require('../../repository/mysql/topic.repo');
let MessageRepo = require('../../repository/mysql/message.repo');
let ModelUtil = require('../../util/model.util');
let ObjectUtil = require("../../util/object.util.js");
let RedisClient = require('../../repository/redis/redis.client');
let redisConn = RedisClient.redisClient().connection;
@ -33,8 +34,6 @@ const PLATFORMS = require('../../include/commons').PLATFORM;
class Users extends RedisModel {
    constructor() {
        super();
        this._key = REDIS_KEYS.Users;
    }
    /**
@ -263,9 +262,9 @@ class Users extends RedisModel {
                                        let topicKey = self.makeRedisKey(REDIS_KEYS.Topic, topic.id);
                                        let topicId = topic.id;
                                        let name = topic.name;
                                        let createTime = topic.create_time;
                                        let createTime = ObjectUtil.timestampToLong(topic.create_time);
                                        let endBy = topic.end_by;
                                        let endTime = topic.end_time;
                                        let endTime = ObjectUtil.timestampToLong(topic.end_time);
                                        let startMessageId = topic.start_message_id;
                                        let endMessageId = topic.end_message_id;
                                        redisConn.multi()