拉黑后端实现

此处输入图片的描述

[TOC]

社区妹子强烈需要拉黑功能,结果刚上线,妹子就被拉黑了…这是个悲伤的故事…

初衷

对于种种原因不想再理会的人,可以删除私信时选择拉黑。拉黑后,拉黑者取消关注对方,删除私信,不在接收对方私信。被拉黑者收到系统消息提示被拉黑,如果是恶意、不良信息则超过一定次数被禁号,但是保留被拉黑之前所有状态,包括关注、私信,但是再次发送私信时提示私信被对方拒绝接收,再次关注提示对方拒绝被你加关注。唯一解除拉黑的手段,拉黑方再次关注对方则自动取消拉黑。

之所以保留状态,是为了尽量减少用户被拉黑的感知,但是又会收到系统提醒,相互矛盾。

策略

  • 删除私信时勾选拉黑:把对方加入自己blacklist列表中,统计数据,取消关注,删除私信会话。
  • 进入主页:返回拉黑数据,点击关注时则根据是否被拉黑进行提示。(更优方式:点击关注时后台判断是否被拉黑,拉黑则拒绝该请求,否则正常关注)
  • 被拉黑者发送私信:进入私信页面返回拉黑数据,已被拉黑则发送消息时直接提示私信被对方拒绝接收,如果中途被拉黑后台会主动判断blacklist而提示私信被对方拒绝接收。(更优方式:开始不传递拉黑数据,发送私信时后台判断提示)

上面也提到了更优办法,其实可以减少查询次数,但是最终没用,还是考虑到体验的问题,blacklist是使用kv存储的,后台查询比客户端请求快,kv费用消耗低。所以每次查询数据附带后传到前端,绝大多数情况用户点击就有提示,而不存在网络延时。

个人语音实现

此处输入图片的描述

自己挖的坑,果然要自己填!

由于之前开启了CRSF,想增强安全性。过了一段时间,自己吧这事给忘了,导致JS的ajax消息无法发送到后台,一直提示400 BAD request。找了好久才发现,详情

但是也找到个可以检测并且建议的办法,ajax提供error反馈错误信息。

1
2
3
4
5
6
7
8
9
10
11
$.ajax({
url: "/profile/{{ user_id }}",
type: 'POST',
data: {data: "failed"},
error: function(e) { //增加错误反馈
console.log(e);
}
})
.done(function (data) {
console.log(data);
});

打造移动版QQ表情

跟QQ手机版的表情类似,可以滑动翻页,总共100个表情。上图看看效果吧,这不是APP,你没看错,是Web。是不是感觉比基于jQuery的QQ表情插件看起来高大上些呢。不是说那个不好,主要是那只适用于PC端,在移动端显示效果很差也不好用,所以想模仿QQ的web页面中的表情输入。
QQ表情


一般Web版表情实现方式

查看过jQuery的QQ表情插件应该知道,每个表情有一个图片,通过CSS把每个表情排列好,点击每个表情的时触发对应的事件,将对应编号组成指定格式(如[em_11])输入到文本框,通过将[em_11]转换为html的img标签显示到页面中。

广场KVDB设计

广场功能

  • 发状态
  • 评论状态(回复评论)
  • 状态、评论赞同或反对
  • 消息提醒

KVDB设计

状态信息记录
uid根据时间戳生成的唯一的倒序值,uid = 未来某个时间戳-当前时间戳(就取3000年吧,如果高小恋到时候还没死的话),KVDB的get请求自动从大到小排序。
状态基本信息

用户状态记录
记录用户所发状态,uid根据时间倒序,用于加载用户自己发布的状态。
用户状态记录

评论、回复记录
评论、回复记录

状态赞同、反对记录
状态赞同、反对

评论(回复)赞同、反对记录
评论(回复)赞同、反对

状态关注者记录
状态有新的回复时通知所有follower
状态关注者

消息提醒记录
有新的回复或评论时添加消息提醒记录。
消息提醒记录