聊天模块及分享模块分享

近来用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_key
    share_click 表示点击者的share_key
    share_plus 表示要奖励的share_key(可能是自己,也可能是他人)

每当用户点击进来后,去查询是否已经点击过,然后去给相应的奖励。

tips:未读消息数量,可在messages table加个冗余字段,每次发送信息的时候,在最新的信息中,更新此冗余字段的值。当然,也可不需要此字段,但这样有一个问题,就是和不同的人来聊天的未读数量,数据库查询会成线性增长。用冗余字段,相当于用空间换取时间,而空间的占用可以忽略不计,时一个比较好的方法

end

本作品采用《CC 协议》,转载必须注明作者和本文链接
Make everything simple instead of making difficulties as simple as possible
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!