聊天模块及分享模块分享
近来用mpvue做了一个小程序,当初选择mpvue的时候,类似vue的语法,吸引了我。现在在让我选,就不会在选mpvue了(可以在github上看相关的坑),所幸项目不太复杂,mpvue还是满足需求的,不满足的就以曲线救国的方式解决了。
这个小程序,有个互聊的模块和分享的模块可以分享下,方便后人
聊天模块
- 可屏蔽。屏蔽者,可主动取消屏蔽。
- 在屏蔽期间,被屏蔽一方可发送信息,但屏蔽者收不到,被屏蔽一方,在信息流中,可看到被屏蔽信息。
- 屏蔽情况下,可相互举报,记录举报内容
- 显示未读消息数量
假设不考虑屏蔽,只是记录两个人的聊天记录,数据库,结构可以这样设计就可以满足需求
messages
table
- id
- user_id
- to_user_id
- content
现在要对聊天记录做一个限制
message_state
table
- id
- user_id
- to_user_id
- state (0 正常1 屏蔽2举报)
- operate_screen_id (记录屏蔽者的id)
- operate_report_id (记录举报者id,可选)
相应的messages
table被 message_state
table 管理messages
table
- id
- user_id
- to_user_id
- content
- message_state_id
相应的需要一个举报表,和messages 数据表结构类似,只不过记录的是两个人的屏蔽及举报记录
report
table
- id
- user_id
- to_user_id
- content
- state (1 或2 )
- message_state_id
屏蔽后屏蔽者看不到被屏蔽者发送的信息,解决办法是在messages
table添加记录屏蔽状态下 screen_user_id字段,查询的时候,where('screen_user_id ','<>','屏蔽者id')
messages
table
-
id
-
user_id
-
to_user_id
-
content
-
message_state_id
-
screen_user_id
对方屏蔽后,被屏蔽者,在信息流中显示“对方已屏蔽了你的字样”,并按时间顺序和正常信息,一起显示。
这样的信息,其实和就像两个人的聊天信息一样,在messages 表中,加个字段状态判断是屏蔽发送的信息即可
最终表结构messages
table -
id
-
user_id
-
to_user_id
-
content
-
message_state_id
-
screen_user_id
-
if_screen (是否是屏蔽时创建的信息,根据此可对该信息显示时做特殊处理,比如加红)
-
if_see (0 未读,1已读)
message_state
table
- id
- user_id
- to_user_id
- state (0 正常1 屏蔽2举报)
- operate_screen_id (记录屏蔽者的id)
- operate_report_id (记录举报者id,可选)
report
table
- id
- user_id
- to_user_id
- content
- state (1 或2 )
分享模块
两种场景
- 自己分享自己 自己奖励+1 不能重复+1
- 他人分享自己 他人奖励+1 不能重复+1
自己分享他人和他人分享自己是一种情况,只不过是参照物不同,上面是以自己为参照物。
users
table
- share_key
- 其他字段
需要一个分享记录表,保存已经点击过的用户
share_record
table
- id
- share_base
- share_click
-
share_plus
share_base
表示参照物的share_keyshare_click
表示点击者的share_keyshare_plus
表示要奖励的share_key(可能是自己,也可能是他人)
每当用户点击进来后,去查询是否已经点击过,然后去给相应的奖励。
tips:未读消息数量,可在messages
table加个冗余字段,每次发送信息的时候,在最新的信息中,更新此冗余字段的值。当然,也可不需要此字段,但这样有一个问题,就是和不同的人来聊天的未读数量,数据库查询会成线性增长。用冗余字段,相当于用空间换取时间,而空间的占用可以忽略不计,时一个比较好的方法
end
本作品采用《CC 协议》,转载必须注明作者和本文链接