mirror of
https://github.com/fumiama/paper-manager.git
synced 2026-06-10 10:50:23 +08:00
add /api/getMessageList
This commit is contained in:
@@ -177,6 +177,16 @@ func init() {
|
||||
}
|
||||
writeresult(w, codeSuccess, &message{M: "成功"}, messageOk, typeSuccess)
|
||||
}}
|
||||
|
||||
apimap["/api/getMessageList"] = &apihandler{"GET", func(w http.ResponseWriter, r *http.Request) {
|
||||
token := r.Header.Get("Authorization")
|
||||
ret, err := getMessageList(token)
|
||||
if err != nil {
|
||||
writeresult(w, codeError, nil, err.Error(), typeError)
|
||||
return
|
||||
}
|
||||
writeresult(w, codeSuccess, ret, messageOk, typeSuccess)
|
||||
}}
|
||||
}
|
||||
|
||||
// APIHandler serves all backend /api call
|
||||
|
||||
@@ -43,6 +43,17 @@ func (r UserRole) Nick() string {
|
||||
return "nil"
|
||||
}
|
||||
|
||||
const (
|
||||
MessageNormal MessageType = iota
|
||||
MessageRegister
|
||||
MessageUserAdded
|
||||
MessageContactChange
|
||||
MessagePasswordChange
|
||||
MessageResetPassword
|
||||
)
|
||||
|
||||
type MessageType uint8
|
||||
|
||||
const (
|
||||
UserTableUser = "user"
|
||||
UserTableMessage = "msg"
|
||||
@@ -315,6 +326,24 @@ type Message struct {
|
||||
Pswd string // Pswd is the user's password to add in register message
|
||||
}
|
||||
|
||||
// Type decide message type by fields Name, Cont and Pswd.
|
||||
func (m *Message) Type() MessageType {
|
||||
switch {
|
||||
case m.Name != "" && m.Cont != "" && m.Pswd != "":
|
||||
return MessageRegister
|
||||
case m.Name == "" && m.Cont != "" && m.Pswd == "":
|
||||
return MessageUserAdded
|
||||
case m.Name != "" && m.Cont != "" && m.Pswd == "":
|
||||
return MessageContactChange
|
||||
case m.Name != "" && m.Cont == "" && m.Pswd != "":
|
||||
return MessagePasswordChange
|
||||
case m.Name != "" && m.Cont == "" && m.Pswd == "":
|
||||
return MessageResetPassword
|
||||
default:
|
||||
return MessageNormal
|
||||
}
|
||||
}
|
||||
|
||||
// SendMessage will send a message
|
||||
func (u *UserDatabase) SendMessage(m *Message) error {
|
||||
m.ID = nil
|
||||
@@ -376,7 +405,6 @@ func (u *UserDatabase) notifyUserAdded(opname, name string) error {
|
||||
m := Message{
|
||||
Date: time.Now().Unix(),
|
||||
Text: opname + "添加了用户 " + name,
|
||||
Name: name,
|
||||
Cont: opname,
|
||||
}
|
||||
u.mu.Lock()
|
||||
@@ -449,7 +477,7 @@ func (u *UserDatabase) notifyPasswordChange(name, npwd string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetMessagesOfUser set Pswd field to empty
|
||||
// GetMessagesOfUser will change non-empty Pswd field to "-"
|
||||
func (u *UserDatabase) GetMessagesOfUser(to int) (ms []Message, err error) {
|
||||
u.mu.RLock()
|
||||
defer u.mu.RUnlock()
|
||||
@@ -459,8 +487,10 @@ func (u *UserDatabase) GetMessagesOfUser(to int) (ms []Message, err error) {
|
||||
}
|
||||
ms = make([]Message, 0, n)
|
||||
m := Message{}
|
||||
err = u.db.FindFor(UserTableMessage, &m, "WHERE ToID="+strconv.Itoa(to), func() error {
|
||||
m.Pswd = ""
|
||||
err = u.db.FindFor(UserTableMessage, &m, "WHERE ToID="+strconv.Itoa(to)+" ORDER BY Date DESC", func() error {
|
||||
if m.Pswd != "" {
|
||||
m.Pswd = "-"
|
||||
}
|
||||
ms = append(ms, m)
|
||||
return nil
|
||||
})
|
||||
|
||||
43
backend/message.go
Normal file
43
backend/message.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package backend
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/fumiama/paper-manager/backend/global"
|
||||
)
|
||||
|
||||
type messageList struct {
|
||||
ID int `json:"id"`
|
||||
Avatar string `json:"avatar"`
|
||||
Date string `json:"date"`
|
||||
Text string `json:"text"`
|
||||
Type global.MessageType `json:"type"`
|
||||
}
|
||||
|
||||
func getMessageList(token string) ([]messageList, error) {
|
||||
user := usertokens.Get(token)
|
||||
if user == nil {
|
||||
return nil, errInvalidToken
|
||||
}
|
||||
ms, err := global.UserDB.GetMessagesOfUser(*user.ID)
|
||||
if err != nil {
|
||||
return nil, nil
|
||||
}
|
||||
if len(ms) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
ml := make([]messageList, len(ms))
|
||||
for i, m := range ms {
|
||||
avtr := ""
|
||||
u, err := global.UserDB.GetUserByName(m.Name)
|
||||
if err == nil {
|
||||
avtr = u.Avtr
|
||||
}
|
||||
ml[i].ID = *m.ID
|
||||
ml[i].Avatar = avtr
|
||||
ml[i].Date = time.Unix(m.Date, 0).Format(chineseDateLayout)
|
||||
ml[i].Text = m.Text
|
||||
ml[i].Type = m.Type()
|
||||
}
|
||||
return ml, nil
|
||||
}
|
||||
Reference in New Issue
Block a user