-
Notifications
You must be signed in to change notification settings - Fork 870
/
user_msg.go
72 lines (61 loc) · 2.14 KB
/
user_msg.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package service
import (
"encoding/json"
"github.com/KubeOperator/KubeOperator/pkg/constant"
"github.com/KubeOperator/KubeOperator/pkg/controller/condition"
"github.com/KubeOperator/KubeOperator/pkg/db"
"github.com/KubeOperator/KubeOperator/pkg/dto"
"github.com/KubeOperator/KubeOperator/pkg/model"
dbUtil "github.com/KubeOperator/KubeOperator/pkg/util/db"
)
type UserMsgService interface {
UpdateLocalMsg(msgID string, user dto.SessionUser) error
PageLocalMsg(num, size int, user dto.SessionUser, conditions condition.Conditions) (dto.UserMsgResponse, error)
MarkAllRead(user dto.SessionUser) error
}
type userMsgService struct {
}
func NewUserMsgService() UserMsgService {
return userMsgService{}
}
func (u userMsgService) PageLocalMsg(num, size int, user dto.SessionUser, conditions condition.Conditions) (dto.UserMsgResponse, error) {
var (
res dto.UserMsgResponse
msgs []model.UserMsg
unread int
)
msgDTOs := []dto.UserMsgDTO{}
d := db.DB.Model(model.UserMsg{})
if err := dbUtil.WithConditions(&d, model.UserMsg{}, conditions); err != nil {
return res, err
}
if err := d.Where("user_id = ? AND send_type = ? AND read_status = ? ", user.UserId, constant.Local, constant.UnRead).Preload("Msg").Count(&res.Total).Order("created_at desc").Offset((num - 1) * size).Limit(size).Preload("Msg").Find(&msgs).Error; err != nil {
return res, err
}
for _, m := range msgs {
var con map[string]string
err := json.Unmarshal([]byte(m.Msg.Content), &con)
if err != nil {
return res, err
}
msgDTOs = append(msgDTOs, dto.UserMsgDTO{
UserMsg: m,
Content: con,
Type: m.Msg.Type,
})
}
res.Items = msgDTOs
res.Unread = unread
return res, nil
}
func (u userMsgService) UpdateLocalMsg(msgID string, user dto.SessionUser) error {
var old model.UserMsg
if err := db.DB.Where("id = ? AND user_id = ?", msgID, user.UserId).Find(&old).Error; err != nil {
return err
}
old.ReadStatus = constant.Read
return db.DB.Save(&old).Error
}
func (u userMsgService) MarkAllRead(user dto.SessionUser) error {
return db.DB.Model(&model.UserMsg{}).Where("user_id = ?", user.UserId).Updates(model.UserMsg{ReadStatus: constant.Read}).Error
}