1
0
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:
源文雨
2023-03-19 18:12:37 +08:00
parent e1ae032ceb
commit bee5caaadc
7 changed files with 134 additions and 105 deletions

View File

@@ -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

View File

@@ -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
View 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
}