Echo 的發(fā)送私信是怎么做的
這篇教程新鮮的東西不多,私信發(fā)送和帖子發(fā)布的做法如出一轍,都是使用 Ajax 異步實現(xiàn),參見這篇文章:Echo 的發(fā)帖操作是怎么做的
直接看前端 js 代碼 letter.js,異步的發(fā)送私信請求具體是如何發(fā)送出去的:

通過 id 選擇器獲取 recipient-name(收信人的 username) 和 message-text(具體私信內(nèi)容) 的值,將這兩個值作為參數(shù)傳遞給 /letter/send 接口。

我們再來看看那個后端接口是啥,下述這段代碼在 MessageController 中:

發(fā)送私信的本質(zhì)是啥,就是一個在 letter 數(shù)據(jù)庫表中插入一行記錄罷了,詳細可見 addMessage 方法,非常簡單,這里不再貼圖出來了。
另外,這里有兩個需要注意的點:
1)第一個需要注意的就是,conversation_id 的賦值,上篇文章我們介紹過,對于這個字段,我們約定,id 小的在前,id 大的在后。
2)第二個需要注意的就是,插入數(shù)據(jù)庫的私信記錄默認狀態(tài)是未讀(status = 0)的,那么,當(dāng)對方(收信人)獲取私信列表的時候,也就是掃描數(shù)據(jù)庫,就可以獲取到這條狀態(tài)是未讀的私信,從而修改相應(yīng)的未讀消息數(shù)量。
可能有些小伙伴會有疑惑,既然這條私信狀態(tài)在數(shù)據(jù)庫的記錄中是未讀的,那對于這個發(fā)信人來說,把他發(fā)出去的私信算作未讀的話,是不是不太符合大眾的邏輯?
是的。所以我們查詢未讀私信數(shù)量的 SQL 語句是這樣寫的:

to_id = userId,也就是說,判斷是否是未讀私信的時候,只判斷那些別人發(fā)給我的私信。而我發(fā)給別人的私信,壓根就不會納入未讀私信的考慮范疇,盡管我發(fā)給別人的這條私信記錄在數(shù)據(jù)庫中的狀態(tài)是 1(未讀),但是那是對于別人(收信人)來說的。

博主小碩在讀,深耕 Java,目前在維護一個教程類倉庫 CS-Wiki「Gitee 官方推薦項目,現(xiàn)已 1.7k+ star,倉庫地址:https://gitee.com/veal98/CS-Wiki」,公眾號上的文章也會在此同步更新,歡迎各位前來交流學(xué)習(xí)。準備春招秋招的小伙伴可以參考我的這個論壇項目 Echo「Gitee 官方推薦項目,現(xiàn)已 800+ star,倉庫地址:https://gitee.com/veal98/Echo」。配套教程正在同步更新中,公眾號后臺回復(fù) "Echo" 即可免費獲取。另外,雖然現(xiàn)在本號仍然很小,不過我還是建了一個交流群『 小牛肉和它的小伙伴們』,感興趣的各位可以下方掃碼加我微信回復(fù) "進群",我拉你進群:

