瀏覽代碼

增加用户操作

Sand 8 年之前
父節點
當前提交
c5f6f1cc9a

+ 80 - 88
src/server/app.js

@ -12,12 +12,6 @@ let bodyParser = require('body-parser');
let log = require('./util/log');
let redis = require('redis');
// IoC
var bearcat = require('bearcat');
var contextPath = require.resolve('./context.json');
global.bearcat = bearcat; // make bearcat global, for `bearcat.module()`
bearcat.createApp([contextPath]);
// server configurations
let APIv1 = require('./include/endpoints').APIv1;
let PAGES = require('./include/endpoints').PAGES;
@ -38,97 +32,95 @@ let management = require('./endpoints/management.endpoint');
// handlers
let SocketHandler = require('./handlers/socket.handler');
bearcat.start(function () {
    // initialize express application
    let app = express();
    app.set('port', config.serverPort);
    // view engine
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'jade');
    // logger, body parser, cookie parser and view path
    app.use(favicon(__dirname + '/public/favicon.ico', null));
    app.use(logger('dev'));
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: true}));
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));
    // pages
    app.use(PAGES.Home.Index, index);
    app.use(PAGES.Socket.Index, socket);
    // setup rest endpoints
    app.use(APIv1.Application.Base, application);
    app.use(APIv1.Chats.Base, chats);
    app.use(APIv1.Users.Base, users);
    app.use(APIv1.Groups.Base, groups);
    app.use(APIv1.Management.Base, management);
    // error handler, only handle the sync call exception
    app.use(function (err, req, res, next) {
        if (err) {
            res
                .status(err.httpStatus || 500)
                .send({message: err.message});
        }
// initialize express application
let app = express();
app.set('port', config.serverPort);
        next(err);
    });
// view engine
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
    // In development mode, error handler will print stacktrace, only handle the sync call exception
    if (app.get('env') === 'development') {
        app.use(function (err, req, res, next) {
            log.error(err);
// logger, body parser, cookie parser and view path
app.use(favicon(__dirname + '/public/favicon.ico', null));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
            next(err);
        });
// pages
app.use(PAGES.Home.Index, index);
app.use(PAGES.Socket.Index, socket);
// setup rest endpoints
app.use(APIv1.Application.Base, application);
app.use(APIv1.Chats.Base, chats);
app.use(APIv1.Users.Base, users);
app.use(APIv1.Groups.Base, groups);
app.use(APIv1.Management.Base, management);
// error handler, only handle the sync call exception
app.use(function (err, req, res, next) {
    if (err) {
        res
            .status(err.httpStatus || 500)
            .send({message: err.message});
    }
    // only handle the sync call exception
    process.on('uncaughtException', function (err) {
        console.error(err);
    });
    next(err);
});
    // now enable http server and socket.io
    let server = require('http').createServer(app);
    let io = require('socket.io').listen(server);
    server.listen(config.serverPort);
    // event listener for HTTP server "error" event
    server.on('error', function (error) {
        if (error.syscall !== 'listen') throw error;
        let bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
        // handle specific listen errors with friendly messages
        switch (error.code) {
            case 'EACCES':
                console.error(bind + ' requires elevated privileges');
                process.exit(1);
                break;
            case 'EADDRINUSE':
                console.error(bind + ' is already in use');
                process.exit(1);
                break;
            default:
                throw error;
        }
    });
// In development mode, error handler will print stacktrace, only handle the sync call exception
if (app.get('env') === 'development') {
    app.use(function (err, req, res, next) {
        log.error(err);
    // event listener for HTTP server "listening" event
    server.on('listening', function onListening() {
        let addr = server.address();
        let bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
        next(err);
    });
}
// only handle the sync call exception
process.on('uncaughtException', function (err) {
    console.error(err);
});
// now enable http server and socket.io
let server = require('http').createServer(app);
let io = require('socket.io').listen(server);
server.listen(config.serverPort);
// event listener for HTTP server "error" event
server.on('error', function (error) {
    if (error.syscall !== 'listen') throw error;
    let bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
    // handle specific listen errors with friendly messages
    switch (error.code) {
        case 'EACCES':
            console.error(bind + ' requires elevated privileges');
            process.exit(1);
            break;
        case 'EADDRINUSE':
            console.error(bind + ' is already in use');
            process.exit(1);
            break;
        default:
            throw error;
    }
});
    let socketHandler = new SocketHandler(io);
    socketHandler.start();
// event listener for HTTP server "listening" event
server.on('listening', function onListening() {
    let addr = server.address();
    let bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
    log.info('Starting IM server, version ' + config.version + ', running on port ' + server.address().port + ', ' + new Date().toLocaleString());
    log.info('Configuration profile: ' + configFile.split('.')[1]);
    log.info("WebSocket listening on ", addr.address, bind);
});
let socketHandler = new SocketHandler(io);
socketHandler.start();
});
log.info('Starting IM server, version ' + config.version + ', running on port ' + server.address().port + ', ' + new Date().toLocaleString());
log.info('Configuration profile: ' + configFile.split('.')[1]);

+ 2 - 0
src/server/models/user/doctor.js

@ -24,6 +24,8 @@ const MAX_INT = require('../../include/commons').MAX_INT;
class Doctor extends BaseModel {
    constructor() {
        super();
        this.$id = 'doctor';
    }
    /**

+ 53 - 8
src/server/models/user/users.js

@ -6,30 +6,77 @@
 */
"use strict";
let RedisKeys = require('../../include/commons').REDIS_KEYS;
let BaseModel = require('../base.model');
let RedisKeys = require('../../include/commons').REDIS_KEYS;
let DoctorRepo = require('../../repository/mysql/doctor.repo');
let PatientRepo = require('../../repository/mysql/patient.repo');
let RedisClient = require('../../repository/redis/redis.client');
let redisConn = RedisClient.redisClient().connection;
let log = require('../../util/log');
let async = require('async');
let bearcate = require('bearcat');
let bearcat = require('bearcat');
let log = require('../../util/log');
let objectUtil = require('../../util/objectUtil');
var imDb = require('../../repository/mysql/db/im.db');
class Users extends BaseModel {
    constructor() {
        super();
        this.$id = 'users';
        this._key = RedisKeys.Users;
    }
    getUser(userId) {
    /**
     * 获取用户。
     *
     * @param userId
     * @param outCallback
     */
    getUser(userId, outCallback) {
        let self = this;
        async.waterfall([
            // determine user type
            function (callback) {
                self.isPatientId(userId, function (err, isPatient) {
                    callback(null, isPatient);
                });
            },
            // get from mysql
            function (isPatientId, callback) {
                let repoProto = isPatientId ? PatientRepo : DoctorRepo;
                repoProto.findOne(userId, function (err, res) {
                    let user = {role: isPatientId ? 'patient' : 'doctor'};
                    if(res.length > 0){
                        user.name = res[0].name;
                        user.sex = res[0].sex;
                        user.birthdate = res[0].birthdate;
                        user.avatar = res[0].avatar;
                    }
                    outCallback(null, user);
                });
            }
        ]);
    }
    /**
     * 获取用户状态。
     *
     * @param userId
     * @param callback
     */
    getUserStatus(userId, callback){
    }
    /**
     * 用户是否在线。
     *
     * @param userId
     * @param callback
     */
    isUserOnline(userId, callback) {
    }
    /**
@ -74,6 +121,4 @@ class Users extends BaseModel {
let Promises = require('bluebird');
Promises.promisifyAll(Users.prototype);
bearcate.module(Users, typeof module !== 'undefined' ? module : {});
module.exports = Users;

+ 1 - 2
src/server/repository/mysql/doctor.repo.js

@ -12,12 +12,11 @@ class DoctorRepo {
    }
    static update() {
    }
    static findOne(doctorId, handler) {
        imDb.execQuery({
            "sql": "select id, name, sex, birthdate, avatar, level from doctors where code = ? ",
            "sql": "select id, name, sex, birthdate, avatar from doctors where id = ? ",
            "args": [doctorId],
            "handler": handler
        });

+ 10 - 6
src/server/repository/mysql/patient.repo.js

@ -8,15 +8,19 @@
var imDb = require('./db/im.db');
class Patient {
class PatientRepo {
    constructor() {
    }
    findOne(patientId){
    static findOne(patientId, handler){
        imDb.execQuery({
            "sql": "select id, name, sex, birthdate, avatar from patients where id = ? ",
            "args": [patientId],
            "handler": handler
        });
    }
    getPatientOpenid(code, handler) {
    static getPatientOpenid(code, handler) {
        var sql = "select openid from patients where code = ? ";
        imDb.execQuery({
@ -27,7 +31,7 @@ class Patient {
    }
    // TODO: 不能直接访问三师库
    getPatientDoctorConsult(patient, doctor, handler) {
    static getPatientDoctorConsult(patient, doctor, handler) {
        var sql = "select * from wlyy_consult_team where patient = ? and doctor = ? and status = 0 and del = '1' ";
        imDb.execQuery({
@ -38,4 +42,4 @@ class Patient {
    };
}
module.exports = Patient;
module.exports = PatientRepo;

+ 6 - 3
src/server/resources/schema/ichat_schema.1.2.8.sql

@ -45,7 +45,8 @@ CREATE TABLE `p2p_messages`
(
	`id` VARCHAR(32) NOT NULL COMMENT '消息ID',
	`session_id` VARCHAR(50) NOT NULL COMMENT '所属会话',
	`sender_id` VARCHAR(50) NOT NULL COMMENT '消息发送者',
	`sender_id` VARCHAR(50) NOT NULL COMMENT '消息发送者ID',
    `sender_name` VARCHAR(50) NOT NULL COMMENT '消息发送者姓名',
	`content_type` INTEGER NOT NULL COMMENT '消息类型,1文本,2图片,3语音,4文章,5跳转,6咨询开始,7咨询结束',
	`content` VARCHAR(1024) COMMENT '消息内容',
	`timestamp` TIMESTAMP(0) COMMENT '发送时间',
@ -57,7 +58,8 @@ CREATE TABLE `group_messages`
(
	`id` VARCHAR(32) NOT NULL COMMENT '消息ID',
	`session_id` VARCHAR(50) NOT NULL COMMENT '所属会话',
	`sender_id` VARCHAR(50) NOT NULL COMMENT '消息发送者',
	`sender_id` VARCHAR(50) NOT NULL COMMENT '消息发送者ID',
    `sender_name` VARCHAR(50) NOT NULL COMMENT '消息发送者姓名',
	`content_type` INTEGER NOT NULL COMMENT '消息类型,1文本,2图片,3语音,4文章,5跳转,6咨询开始,7咨询结束',
	`content` VARCHAR(1024) COMMENT '消息内容',
	`timestamp` TIMESTAMP(0) COMMENT '发送时间',
@ -69,7 +71,8 @@ CREATE TABLE `muc_messages`
(
	`id` VARCHAR(32) NOT NULL COMMENT '消息ID',
	`session_id` VARCHAR(50) NOT NULL COMMENT '所属会话',
	`sender_id` VARCHAR(50) NOT NULL COMMENT '消息发送者',
	`sender_id` VARCHAR(50) NOT NULL COMMENT '消息发送者ID',
    `sender_name` VARCHAR(50) NOT NULL COMMENT '消息发送者姓名',
	`content_type` INTEGER NOT NULL COMMENT '消息类型,1文本,2图片,3语音,4文章,5跳转,6咨询开始,7咨询结束',
	`content` VARCHAR(1024) COMMENT '消息内容',
	`timestamp` TIMESTAMP(0) COMMENT '发送时间',

+ 12 - 0
test/server/models/user/user.Test.js

@ -30,4 +30,16 @@ describe('Users class', function () {
            });
        })
    });
    describe('getUser', function () {
        it('should return user with really id', function (done) {
            let users = new Users();
            users.getUserAsync('test00000000006').then(function (res) {
                assert.notStrictEqual(res, null);
                if(res !== null) console.log(res);
                done();
            });
        });
    })
});