-- ----------------------------
-- Table structure for device
-- ----------------------------
DROP TABLE IF EXISTS `device`;
CREATE TABLE `device`
(
    `id`             bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `user_id`        bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '账户id',
    `type`           tinyint(3) NOT NULL COMMENT '设备类型,1:Android；2：IOS；3：Windows; 4：MacOS；5：Web',
    `brand`          varchar(20) NOT NULL COMMENT '手机厂商',
    `model`          varchar(20) NOT NULL COMMENT '机型',
    `system_version` varchar(10) NOT NULL COMMENT '系统版本',
    `sdk_version`    varchar(10) NOT NULL COMMENT 'app版本',
    `status`         tinyint(3) NOT NULL DEFAULT '0' COMMENT '在线状态，0：离线；1：在线',
    `conn_addr`      varchar(25) NOT NULL COMMENT '连接层服务器地址',
    `client_addr`    varchar(25) NOT NULL COMMENT '客户端地址',
    `create_time`    datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time`    datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY              `idx_user_id` (`user_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='设备';

-- ----------------------------
-- Table structure for friend
-- ----------------------------
DROP TABLE IF EXISTS `friend`;
CREATE TABLE `friend`
(
    `id`          bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `user_id`     bigint(20) unsigned NOT NULL COMMENT '用户id',
    `friend_id`   bigint(20) unsigned NOT NULL COMMENT '好友id',
    `remarks`     varchar(20)   NOT NULL COMMENT '备注',
    `extra`       varchar(1024) NOT NULL COMMENT '附加属性',
    `status`      tinyint(4) NOT NULL COMMENT '状态，1：申请，2：同意',
    `create_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_user_id_friend_id` (`user_id`, `friend_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='好友';

-- ----------------------------
-- Table structure for group
-- ----------------------------
DROP TABLE IF EXISTS `group`;
CREATE TABLE `group`
(
    `id`           bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `name`         varchar(50)   NOT NULL COMMENT '群组名称',
    `avatar_url`   varchar(255)  NOT NULL COMMENT '群组头像',
    `introduction` varchar(255)  NOT NULL COMMENT '群组简介',
    `user_num`     int(11) NOT NULL DEFAULT '0' COMMENT '群组人数',
    `extra`        varchar(1024) NOT NULL COMMENT '附加属性',
    `create_time`  datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time`  datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='群组';

-- ----------------------------
-- Table structure for group_user
-- ----------------------------
DROP TABLE IF EXISTS `group_user`;
CREATE TABLE `group_user`
(
    `id`          bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `group_id`    bigint(20) unsigned NOT NULL COMMENT '组id',
    `user_id`     bigint(20) unsigned NOT NULL COMMENT '用户id',
    `member_type` tinyint(4) NOT NULL COMMENT '成员类型，1：管理员；2：普通成员',
    `remarks`     varchar(20)   NOT NULL COMMENT '备注',
    `extra`       varchar(1024) NOT NULL COMMENT '附加属性',
    `status`      tinyint(255) NOT NULL COMMENT '状态',
    `create_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_group_id_user_id` (`group_id`, `user_id`) USING BTREE,
    KEY           `idx_user_id` (`user_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='群组成员';

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`
(
    `id`           bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `phone_number` varchar(20)   NOT NULL COMMENT '手机号',
    `nickname`     varchar(20)   NOT NULL COMMENT '昵称',
    `sex`          tinyint(4) NOT NULL COMMENT '性别，0:未知；1:男；2:女',
    `avatar_url`   varchar(256)  NOT NULL COMMENT '用户头像链接',
    `extra`        varchar(1024) NOT NULL COMMENT '附加属性',
    `create_time`  datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time`  datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_phone_number` (`phone_number`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='用户';

CREATE TABLE `seq`
(
    `id`          bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `object_type` tinyint  NOT NULL COMMENT '对象类型,1:用户；2：群组',
    `object_id`   bigint unsigned NOT NULL COMMENT '对象id',
    `seq`         bigint unsigned NOT NULL COMMENT '序列号',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_object` (`object_type`,`object_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='序列号';


-- ----------------------------
-- Table structure for message
-- ----------------------------
DROP TABLE IF EXISTS `message_000`;
CREATE TABLE `message_000`
(
    `id`            bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `user_id`       bigint(20) unsigned NOT NULL COMMENT '所属类型的id',
    `request_id`    bigint(20) NOT NULL COMMENT '请求id',
    `sender_type`   tinyint(3) NOT NULL COMMENT '发送者类型',
    `sender_id`     bigint(20) unsigned NOT NULL COMMENT '发送者id',
    `receiver_type` tinyint(3) NOT NULL COMMENT '接收者类型,1:个人；2：群组',
    `receiver_id`   bigint(20) unsigned NOT NULL COMMENT '接收者id,如果是单聊信息，则为user_id，如果是群组消息，则为group_id',
    `to_user_ids`   varchar(255) NOT NULL COMMENT '需要@的用户id列表，多个用户用，隔开',
    `type`          tinyint(4) NOT NULL COMMENT '消息类型',
    `content`       blob         NOT NULL COMMENT '消息内容',
    `seq`           bigint(20) unsigned NOT NULL COMMENT '消息序列号',
    `send_time`     datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP (3) COMMENT '消息发送时间',
    `status`        tinyint(255) NOT NULL DEFAULT '0' COMMENT '消息状态，0：未处理1：消息撤回',
    `create_time`   datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time`   datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_user_id_seq` (`user_id`, `seq`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='消息';
