本文同步發表於: Sponge Records
本文將會繼續上一回的內容,針對上一篇實作會產生的問題作解決與設計如何提供圖表資料
上回實作的 api 並未加上圖表名稱的驗證機制,因此可能會出現重名的狀況
我們先加上這一機制,只需要在 models\chat.go 內加上驗證機制就好
models\chat.go - var Validate()
//驗證傳入訊息
func (chatlist *ChatList) Validate() (map[string]interface{}, bool) {
//認證圖表是否存在
temp := &ChatList{}
err := GetDB().Table("chatlist").Where("chatname = ?", chatlist.ChatName).First(temp).Error
if err != nil && err != gorm.ErrRecordNotFound {
return u.Message(false, "Connection error"), false
}
if temp.ChatName != "" {
return u.Message(false, "chat has been used"), false
}
return u.Message(false, "Requirement passed"), true
}
這樣就可以避免圖表名稱重複了
由於我們設計時需要考慮權限,目前只會先驗證帳號是否存在,如果存在才會將列表回傳
並且在資料讀取方面也需要傳入 token 才能進行,因此在傳入的資料後會先做以下判定
判定帳號是否存在 -> 回傳列表 -> 透過列表取得圖表資料
我們先在 main.go 增加讀取用 api 的路由
//讀取圖表 api
router.HandleFunc("/api/chat/getList", controllers.GetChatList).Methods("POST")
router.HandleFunc("/api/chat/getData", controllers.GetChatData).Methods("POST")
然後在 controllers\chatsControllers.go 中增加
controllers\chatsControllers.go- var GetChatList
var GetChatList = func(w http.ResponseWriter, r *http.Request) {
ChatList := &models.ChatList{}
err := json.NewDecoder(r.Body).Decode(ChatList)
//如果輸入的請求錯誤
if err != nil {
u.Respond(w, u.Message(false, "Invalid request"))
return
}
resp := ChatList.GetChatData()
u.Respond(w, resp)
}
下一回將會繼續設計讀取的 api 中的邏輯部分 ,讓存入資料庫的圖表可以被前端所使用