聊天模組及分享模組分享

jcc123發表於2018-09-24

近來用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 協議》,轉載必須註明作者和本文連結
NOT IS BECAUSE I WANT TO WRITE, BUT I WANT TO INCREASE, SO I GO TO WRITE~~

相關文章