From bee5caaadca6e5eb45467027fd24a53b63f6b191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Sun, 19 Mar 2023 18:12:37 +0800 Subject: [PATCH] add /api/getMessageList --- backend/api.go | 10 ++ backend/global/user.go | 38 +++++++- backend/message.go | 43 +++++++++ frontend/vben/src/api/dashboard/index.ts | 10 ++ .../src/api/dashboard/model/workbenchModel.ts | 16 ++++ .../workbench/components/DynamicInfo.vue | 26 ++++- .../dashboard/workbench/components/data.ts | 96 ------------------- 7 files changed, 134 insertions(+), 105 deletions(-) create mode 100644 backend/message.go create mode 100644 frontend/vben/src/api/dashboard/index.ts create mode 100644 frontend/vben/src/api/dashboard/model/workbenchModel.ts delete mode 100644 frontend/vben/src/views/dashboard/workbench/components/data.ts diff --git a/backend/api.go b/backend/api.go index 7dbbcb6..7bd5e41 100644 --- a/backend/api.go +++ b/backend/api.go @@ -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 diff --git a/backend/global/user.go b/backend/global/user.go index f0bdd67..c8de40b 100644 --- a/backend/global/user.go +++ b/backend/global/user.go @@ -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 }) diff --git a/backend/message.go b/backend/message.go new file mode 100644 index 0000000..e9ad0fb --- /dev/null +++ b/backend/message.go @@ -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 +} diff --git a/frontend/vben/src/api/dashboard/index.ts b/frontend/vben/src/api/dashboard/index.ts new file mode 100644 index 0000000..b9f1d40 --- /dev/null +++ b/frontend/vben/src/api/dashboard/index.ts @@ -0,0 +1,10 @@ +import { defHttp } from '/@/utils/http/axios' +import { MessageItem } from './model/workbenchModel' + +enum Api { + GetMessageList = '/getMessageList', +} + +export const getMessageList = () => { + return defHttp.get({ url: Api.GetMessageList }) +} diff --git a/frontend/vben/src/api/dashboard/model/workbenchModel.ts b/frontend/vben/src/api/dashboard/model/workbenchModel.ts new file mode 100644 index 0000000..98af055 --- /dev/null +++ b/frontend/vben/src/api/dashboard/model/workbenchModel.ts @@ -0,0 +1,16 @@ +export enum MessageTypeEnum { + MessageNormal = 0, + MessageRegister = 1, + MessageUserAdded = 2, + MessageContactChange = 3, + MessagePasswordChange = 4, + MessageResetPassword = 5, +} + +export interface MessageItem { + id: number + avatar: string + date: string + text: string + type: MessageTypeEnum +} diff --git a/frontend/vben/src/views/dashboard/workbench/components/DynamicInfo.vue b/frontend/vben/src/views/dashboard/workbench/components/DynamicInfo.vue index 06fcb06..057089b 100644 --- a/frontend/vben/src/views/dashboard/workbench/components/DynamicInfo.vue +++ b/frontend/vben/src/views/dashboard/workbench/components/DynamicInfo.vue @@ -1,6 +1,6 @@ @@ -20,10 +29,17 @@ diff --git a/frontend/vben/src/views/dashboard/workbench/components/data.ts b/frontend/vben/src/views/dashboard/workbench/components/data.ts deleted file mode 100644 index b89b606..0000000 --- a/frontend/vben/src/views/dashboard/workbench/components/data.ts +++ /dev/null @@ -1,96 +0,0 @@ -interface NavItem { - title: string - icon: string - color: string -} - -interface DynamicInfoItem { - avatar: string - name: string - date: string - desc: string -} - -export const navItems: NavItem[] = [ - { - title: '首页', - icon: 'ion:home-outline', - color: '#1fdaca', - }, - { - title: '仪表盘', - icon: 'ion:grid-outline', - color: '#bf0c2c', - }, - { - title: '组件', - icon: 'ion:layers-outline', - color: '#e18525', - }, - { - title: '系统管理', - icon: 'ion:settings-outline', - color: '#3fb27f', - }, - { - title: '权限管理', - icon: 'ion:key-outline', - color: '#4daf1bc9', - }, - { - title: '图表', - icon: 'ion:bar-chart-outline', - color: '#00d8ff', - }, -] - -export const dynamicInfoItems: DynamicInfoItem[] = [ - { - avatar: 'dynamic-avatar-1|svg', - name: '威廉', - date: '刚刚', - desc: `在 开源组 创建了项目 Vue`, - }, - { - avatar: 'dynamic-avatar-2|svg', - name: '艾文', - date: '1个小时前', - desc: `关注了 威廉 `, - }, - { - avatar: 'dynamic-avatar-3|svg', - name: '克里斯', - date: '1天前', - desc: `发布了 个人动态 `, - }, - { - avatar: 'dynamic-avatar-4|svg', - name: 'Vben', - date: '2天前', - desc: `发表文章 如何编写一个Vite插件 `, - }, - { - avatar: 'dynamic-avatar-5|svg', - name: '皮特', - date: '3天前', - desc: `回复了 杰克 的问题 如何进行项目优化?`, - }, - { - avatar: 'dynamic-avatar-6|svg', - name: '杰克', - date: '1周前', - desc: `关闭了问题 如何运行项目 `, - }, - { - avatar: 'dynamic-avatar-1|svg', - name: '威廉', - date: '1周前', - desc: `发布了 个人动态 `, - }, - { - avatar: 'dynamic-avatar-1|svg', - name: '威廉', - date: '2021-04-01 20:00', - desc: `推送了代码到 Github`, - }, -]