/* ---------------------------------------------------- */
/*  Generated by Enterprise Architect Version 12.0 		*/
/*  Created On : 09-Dec-2016 10:34:58 AM 				*/
/*  DBMS       : MySql 						*/
/* ---------------------------------------------------- */

SET FOREIGN_KEY_CHECKS=0;

/* Drop Tables */

DROP TABLE IF EXISTS `app_status` CASCADE
;

DROP TABLE IF EXISTS `topics` CASCADE
;

DROP TABLE IF EXISTS `p2p_messages` CASCADE
;

DROP TABLE IF EXISTS `group_messages` CASCADE
;

DROP TABLE IF EXISTS `muc_messages` CASCADE
;

DROP TABLE IF EXISTS `participants` CASCADE
;

DROP TABLE IF EXISTS `sessions` CASCADE
;

DROP TABLE IF EXISTS `sticky_sessions` CASCADE
;

DROP TABLE IF EXISTS `wechat_access_tokens` CASCADE
;

/* Create Tables */

CREATE TABLE `app_status`
(
	`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
	`platform` TINYINT COMMENT '平台，0为iOS,1为安卓',
	`token` VARCHAR(100) COMMENT '个推Token',
	`client_id` VARCHAR(100) COMMENT '客户端ID',
	`app_in_bg` TINYINT COMMENT 'App是否处于后台状态',
	`last_login_time` TIMESTAMP(0) COMMENT '最后登录 时间',
	CONSTRAINT `PK_user_status` PRIMARY KEY (`user_id`)
) COMMENT='app端状态'

CREATE TABLE `topics`
(
	`id` INTEGER NOT NULL COMMENT 'ID',
	`session_id` VARCHAR(50) NOT NULL COMMENT 'MUC会话ID',
	`name` VARCHAR(50) COMMENT '议题名称',
	`create_time` TIMESTAMP(0) COMMENT '创建时间',
	`end_by` VARCHAR(50) COMMENT '结束人ID',
	`start_message_id` INTEGER COMMENT '消息起始ID',
	`end_message_id` INTEGER COMMENT '消息结束ID',
	CONSTRAINT `PK_topics` PRIMARY KEY (`id`)
) COMMENT='议题，仅MUC模式使用。'
;

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 '消息发送者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 '发送时间',
	CONSTRAINT `PK_messages` PRIMARY KEY (`id`)
) COMMENT='P2P会话消息'
;

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 '消息发送者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 '发送时间',
	CONSTRAINT `PK_messages` PRIMARY KEY (`id`)
) COMMENT='群会话消息'
;

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 '消息发送者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 '发送时间',
	CONSTRAINT `PK_messages` PRIMARY KEY (`id`)
) COMMENT='MUC会话消息'
;

CREATE TABLE `participants`
(
	`session_id` VARCHAR(50) NOT NULL COMMENT '会话ID。ID结构：以患者ID+最大次数',
	`participaint_id` VARCHAR(50) NOT NULL COMMENT '参与者ID',
	`participaint_role` INTEGER COMMENT '参与者角色，MUC模式中的主持人/普通参与者',
	`receiving` TINYINT COMMENT '当前是否正在接收',
	CONSTRAINT `PK_participants` PRIMARY KEY (`session_id`,`participaint_id`)
) COMMENT='会话参与者'
;

CREATE TABLE `sessions`
(
	`id` VARCHAR(50) NOT NULL COMMENT '会话标识。会话标识来源根据业务场景：1 医生间P2P会话使用随机生成的ID；2 医生间的群会话使用行政团队的ID；3 医生与患者间的咨询以患者的ID+当前咨询次数为ID',
	`name` VARCHAR(50) NOT NULL COMMENT '会话名称',
	`type` INTEGER NOT NULL COMMENT '会话类型，1表示MUC会话，2表示P2P，3表示群会话，4表示临时讨论组',
	`create_date` DATE NOT NULL COMMENT '创建时间',
	CONSTRAINT `PK_sessions` PRIMARY KEY (`id`)
) COMMENT='会话'
;

CREATE TABLE `sticky_sessions`
(
	`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
	`session_id` VARCHAR(50) NOT NULL COMMENT '会话ID',
	`score` NUMERIC(15,0) COMMENT '置顶分值',
	CONSTRAINT `PK_sticky_sessions` PRIMARY KEY (`user_id`,`session_id`)
) COMMENT='置顶会话'
;

CREATE TABLE `wechat_access_tokens`
(
	`access_token` VARCHAR(50) NOT NULL COMMENT '访问token',
	`expiry_date` TIMESTAMP(0) COMMENT '过期时间',
	`create_time` TIMESTAMP(0) COMMENT '数据创建时间',
	CONSTRAINT `PK_wechat_access_tokens` PRIMARY KEY (`access_token`)
) COMMENT='微信接口调用所需要token'
;

/* Create Primary Keys, Indexes, Uniques, Checks */

ALTER TABLE `topics` 
 ADD INDEX `IXFK_topics_sessions` (`session_id` ASC)
;

ALTER TABLE `p2p_messages` 
 ADD INDEX `IXFK_messages_participants` (`session_id` ASC,`sender_id` ASC)
;

ALTER TABLE `p2p_messages` 
 ADD INDEX `IXFK_messages_sessions` (`session_id` ASC)
;

ALTER TABLE `group_messages` 
 ADD INDEX `IXFK_messages_participants` (`session_id` ASC,`sender_id` ASC)
;

ALTER TABLE `group_messages` 
 ADD INDEX `IXFK_messages_sessions` (`session_id` ASC)
;

ALTER TABLE `muc_messages` 
 ADD INDEX `IXFK_messages_participants` (`session_id` ASC,`sender_id` ASC)
;

ALTER TABLE `muc_messages` 
 ADD INDEX `IXFK_messages_sessions` (`session_id` ASC)
;

SET FOREIGN_KEY_CHECKS=1;

/* 用户视图：医生、患者、用户微信状态*/
create or replace view doctors as 
select code id, name, sex, birthday birthdate, photo avatar, level
from wlyy.wlyy_doctor;

create or replace view patients as 
select code id, name, sex, birthday birthdate, photo avatar, openid
from wlyy.wlyy_patient;

create or replace view wechat_status as
select code user_id, openid open_id
from wlyy.wlyy_patient
;