聊天模块及分享模块分享

近来用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
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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