1
0
mirror of https://github.com/fumiama/paper-manager.git synced 2026-06-06 16:30:23 +08:00
Files
paper-manager/backend/message.go
2023-03-21 21:42:01 +08:00

110 lines
2.2 KiB
Go

package backend
import (
"errors"
"time"
"github.com/fumiama/paper-manager/backend/global"
)
var (
errInvalidMessageID = errors.New("invalid message id")
errNoAcceptPermission = errors.New("no accept permission")
errNothingToDo = errors.New("nothing to do")
)
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))
am := make(map[string]string, 64)
for i, m := range ms {
avtr := ""
n := m.Name
if n == "" {
n = m.Cont
}
if a, ok := am[n]; ok {
avtr = a
} else {
u, err := global.UserDB.GetUserByName(n)
if err == nil {
avtr = u.Avtr
am[n] = 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
}
func acceptMessage(token string, id int) error {
user := usertokens.Get(token)
if user == nil {
return errInvalidToken
}
if !user.IsSuper() {
return errNoAcceptPermission
}
m, err := global.UserDB.GetMessageByID(id)
if err != nil {
return err
}
if m.ToID != *user.ID {
return errInvalidMessageID
}
switch m.Type() {
case global.MessageRegister:
return global.UserDB.AddUser(&global.User{
Role: global.RoleUser,
Pswd: m.Pswd,
Name: m.Name,
Cont: m.Cont,
}, user.Name)
case global.MessageResetPassword:
u, err := global.UserDB.GetUserByName(m.Name)
if err != nil {
return err
}
return global.UserDB.UpdateUserPassword(*u.ID, user.Name, "123456")
default:
return errNothingToDo
}
}
func delMessage(token string, id int) error {
user := usertokens.Get(token)
if user == nil {
return errInvalidToken
}
m, err := global.UserDB.GetMessageByID(id)
if err != nil {
return err
}
if m.ToID != *user.ID {
return errInvalidMessageID
}
return global.UserDB.DelMessageByID(id)
}