站内信设计方案


一、背景

当前使用运维平台的用户进行沟通时,更多的是依赖微信和邮件通知,而运维平台作为一个整体的产品,也需要能够进行内部沟通的一种服务 - 站内信。

站内信的设计基调

站内信的设计基调取决于用户如何使用站内信:

  1. 用户不会守着运维平台这个页面,等待消息通知,查看消息内容,然后跳转到要操作的页面。
    1. 也就是说站内信不是第一入口,站内信的实时性意义也不大。
    2. 同很多社交网站不同(Facebook,知乎,微博等),用户会守在社交网站的主页面,不断刷新新内容,同时检查新消息(主要是个人私信、别人的回复等,也绝不是为了检查系统通知消息)
  2. 用户会根据邮件通知,决定是否要进入运维平台进行操作
  3. 如果邮件特别多,例如同时有多个工单需要用户处理,用户也会在工单平台提供的“我的待办”页面进行所有工作。
  4. 如果邮件被误删了,没有邮件链接直接进入要操作的模块
    1. 那么或者通过索要链接/单号的方式,前往指定页面
    2. 或者直接在相关模块进行搜索

上面的描述都意味着用户基本不会使用站内信,那么在什么样的场合会使用站内信呢?

  1. 不发邮件,只发站内信的消息通知,例如全站通知、编辑操作、Comment操作等
  2. 当具体模块没有详细的操作记录时,可以通过查看站内信的发生时间

当前只有产品消息通知,消息展示也没有进行归类聚合,以后增加全站通知、mention、like、comment等类型的站内信时,就需要考虑按类型进行消息聚合了。

二、需求描述

站内信通常需要解决两个需求:

  1. 用户对用户的站内信,管理员对用户的站内信:即一对一发送
  2. 管理员对多用户、用户组、全站的站内信:即一对多发送

(还有一种是用户对产品的站内信,例如对某个模块的反馈、疑问之类的)

我们目前的需求是:

  1. 管理员对多用户发送站内信
    1. 对用户真实性不做校验
    2. 对标题长度、内容长度进行限制(分别是45个字节、150个字节,对应中文字符15个、50个)
    3. 对收件人的拼音长度进行限制(最长50个字节)
  2. 用户可以查看自己的站内信
    1. 按“全部、已读、未读”过滤
    2. 按消息来源分类:工单平台、资源管理、自动装机、漏洞平台、故障平台。。。
  3. 用户可以删除、批量删除站内信
  4. 用户可以已阅、批量已阅、全部标记为已读 站内信
  5. 运维平台页面顶部的消息图标
    1. 展示未读消息数,超过99显示 99+
    2. 鼠标放上去,会有下拉框,展示最近10条未读消息(展示“时间”,“消息来源”,“标题”)
    3. 下拉框的底部有两个按钮:“更多”,加载更多未读消息;“查看全部”,跳转到站内信列表页面(最好另开一个窗口)
    4. 点击下拉框里的未读消息,通过弹出框展示详情;然后在未读列表里删除该记录,在数据库里标记为已读,消息图标的未读消息数量减一
  6. 管理员页面:
    1. 更新用户
    2. 删除消息
    3. 统计数据
    4. 增加module
    5. 增加站内信类型
    6. 发送全站消息

三、系统设计

功能设计

功能 接口 详情
发送站内信 POST /v1/message 校验module_name,校验title content receiver_name 长度
获取站内信列表 GET /
统计信息 暂无

四、系统流程

发送站内信

  1. 读取POST请求的request body
  2. 校验长度
  3. 插入数据库
  4. 返回

获取站内信列表

  1. 调用子模块,插入发送给全站或我所属用户组的站内信
  2. 根据查询条件,返回数据库数据

获取未读站内信数量

  1. 调用子模块,插入发送给全站或我所属用户组的站内信
  2. 返回数量

批量已阅

  1. 检查messageId是不是属于当前用户

  2. inbox_message表里把 read 置为1,修改update_time

全部已阅

  1. update inbox_message set “read”=1, “update_time”=now where “receiver_name”=currentUser() and “read” = 0

批量删除

  1. 检查messageId是不是属于当前用户

  2. inbox_message表里把 deleted 置为1,修改update_time

全部删除

  1. update inbox_message set “deleted”=1, “update_time”=now where “receiver_name”=currentUser() and “deleted” = 0

五、数据库设计

站内信内容表

CREATE TABLE `inbox_message_text` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(128) NOT NULL DEFAULT '',
  `content` longtext NOT NULL,
  `create_time` datetime NOT NULL,
  `update_time` datetime NOT NULL,
  `send_type` tinyint(4) NOT NULL DEFAULT '0',
  `creator_name` varchar(255) NOT NULL DEFAULT '',
  `deleted` tinyint(4) NOT NULL DEFAULT '0',
  `module_id` bigint(20) NOT NULL,
  `link` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Field Type Null Key Default Extra Comment
id bigint(20) NO PRI NULL auto_increment
title varchar(128) NO
content longtext NO NULL
create_time datetime NO NULL
update_time datetime NO NULL
send_type tinyint(4) NO 0 0是发全部,1是指定用户
creator_name varchar(255) NO 系统管理员是 sysadmin
module_id<
内信设计⽅案 ⼀、背景 当前使⽤运维平台的⽤户进⾏沟通时,更多的是依赖微信和邮件通知,⽽运维平台作为⼀个整体的产品,也需要能够进⾏内部沟通的⼀种服 务 - 内信内信设计基调 内信设计基调取决于⽤户如何使⽤内信: 1. ⽤户不会守着运维平台这个页⾯,等待消息通知,查看消息内容,然后跳转到要操作的页⾯。 1. 也就是说内信不是第⼀⼊⼝,内信的实时性意义也不⼤。 2. 同很多社交⽹不同(Facebook,知乎,微博等),⽤户会守在社交⽹的主页⾯,不断刷新新内容,同时检查新消息(主要 是个⼈私信、别⼈的回复等,也绝不是为了检查系统通知消息) 2. ⽤户会根据邮件通知,决定是否要进⼊运维平台进⾏操作 3. 如果邮件特别多,例如同时有多个⼯单需要⽤户处理,⽤户也会在⼯单平台提供的"我的待办"页⾯进⾏所有⼯作。 4. 如果邮件被误删了,没有邮件链接直接进⼊要操作的模块 1. 那么或者通过索要链接/单号的⽅式,前往指定页⾯ 2. 或者直接在相关模块进⾏搜索 上⾯的描述都意味着⽤户基本不会使⽤内信,那么在什么样的场合会使⽤内信呢? 1. 不发邮件,只发内信的消息通知,例如全通知、编辑操作、Comment操作等 2. 当具体模块没有详细的操作记录时,可以通过查看内信的发⽣时间 当前只有产品消息通知,消息展⽰也没有进⾏归类聚合,以后增加全通知、mention、like、comment等类型的内信时,就需要考虑按 类型进⾏消息聚合了。 ⼆、需求描述 内信通常需要解决两个需求: 1. ⽤户对⽤户的内信,管理员对⽤户的内信:即⼀对⼀发送 2. 管理员对多⽤户、⽤户组、全内信:即⼀对多发送 (还有⼀种是⽤户对产品的内信,例如对某个模块的反馈、疑问之类的) 我们⽬前的需求是: 1. 管理员对多⽤户发送内信 1. 对⽤户真实性不做校验 2. 对标题长度、内容长度进⾏限制(分别是45个字节、150个字节,对应中⽂字符15个、50个) 3. 对收件⼈的拼⾳长度进⾏限制(最长50个字节) 2. ⽤户可以查看⾃⼰的内信 1. 按"全部、已读、未读"过滤 2. 按消息来源分类:⼯单平台、资源管理、⾃动装机、漏洞平台、故障平台。。。 3. ⽤户可以删除、批量删除内信 4. ⽤户可以已阅、批量已阅、全部标记为已读 内信 5. 运维平台页⾯顶部的消息图标 1. 展⽰未读消息数,超过99显⽰ 99+ 2. ⿏标放上去,会有下拉框,展⽰最近10条未读消息(展⽰"时间","消息来源","标题") 3. 下拉框的底部有两个按钮:"更多",加载更多未读消息;"查看全部",跳转到内信列表页⾯(最好另开⼀个窗⼝) 4. 点击下拉框⾥的未读消息,通过弹出框展⽰详情;然后在未读列表⾥删除该记录,在数据库⾥标记为已读,消息图标的未读消息 数量减⼀ 6. 管理员页⾯: 1. 更新⽤户 2. 删除消息 3. 统计数据 4. 增加module 5. 增加内信类型 6. 发送全消息 三、系统设计 功能设计 功能 功能 接⼝ 接⼝ 详情 详情 发送内信 POST /v1/message 校验module_name,校验title content receiver_name 长度 获取内信列表 GET / 统计信息 暂⽆ 四、系统流程 发送内信 1. 读取POST请求的request body 2. 校验长度 3. 插⼊数据库 4. 返回 获取内信列表 1. 调⽤⼦模块,插⼊发送给全或我所属⽤户组的内信 2. 根据查询条件,返回数据库数据 获取未读内信数量 1. 调⽤⼦模块,插⼊发送给全或我所属⽤户组的内信 2. 返回数量 批量已阅 1. 检查messageId是不是属于当前⽤户 2. inbox_message表⾥把 read 置为1,修改update_time 全部已阅 1. update inbox_message set "read"=1, "update_time"=now where "receiver_name"=currentUser() and "read" = 0 批量删除 1. 检查messageId是不是属于当前⽤户 2. inbox_message表⾥把 deleted 置为1,修改update_time 全部删除 1. update inbox_message set "deleted"=1, "update_time"=now where "receiver_name"=currentUser() and "deleted" = 0 五、数据库设计 内信内容表 Field Field Type Type Null Null Key Key Default Default Extra Extr
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值