/
message.go
95 lines (85 loc) · 2.99 KB
/
message.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package database
import (
"github.com/gotify/server/v2/model"
"github.com/jinzhu/gorm"
)
// GetMessageByID returns the messages for the given id or nil.
func (d *GormDatabase) GetMessageByID(id uint) (*model.Message, error) {
msg := new(model.Message)
err := d.DB.Find(msg, id).Error
if err == gorm.ErrRecordNotFound {
err = nil
}
if msg.ID == id {
return msg, err
}
return nil, err
}
// CreateMessage creates a message.
func (d *GormDatabase) CreateMessage(message *model.Message) error {
return d.DB.Create(message).Error
}
// GetMessagesByUser returns all messages from a user.
func (d *GormDatabase) GetMessagesByUser(userID uint) ([]*model.Message, error) {
var messages []*model.Message
err := d.DB.Joins("JOIN applications ON applications.user_id = ?", userID).
Where("messages.application_id = applications.id").Order("id desc").Find(&messages).Error
if err == gorm.ErrRecordNotFound {
err = nil
}
return messages, err
}
// GetMessagesByUserSince returns limited messages from a user.
// If since is 0 it will be ignored.
func (d *GormDatabase) GetMessagesByUserSince(userID uint, limit int, since uint) ([]*model.Message, error) {
var messages []*model.Message
db := d.DB.Joins("JOIN applications ON applications.user_id = ?", userID).
Where("messages.application_id = applications.id").Order("id desc").Limit(limit)
if since != 0 {
db = db.Where("messages.id < ?", since)
}
err := db.Find(&messages).Error
if err == gorm.ErrRecordNotFound {
err = nil
}
return messages, err
}
// GetMessagesByApplication returns all messages from an application.
func (d *GormDatabase) GetMessagesByApplication(tokenID uint) ([]*model.Message, error) {
var messages []*model.Message
err := d.DB.Where("application_id = ?", tokenID).Order("id desc").Find(&messages).Error
if err == gorm.ErrRecordNotFound {
err = nil
}
return messages, err
}
// GetMessagesByApplicationSince returns limited messages from an application.
// If since is 0 it will be ignored.
func (d *GormDatabase) GetMessagesByApplicationSince(appID uint, limit int, since uint) ([]*model.Message, error) {
var messages []*model.Message
db := d.DB.Where("application_id = ?", appID).Order("id desc").Limit(limit)
if since != 0 {
db = db.Where("messages.id < ?", since)
}
err := db.Find(&messages).Error
if err == gorm.ErrRecordNotFound {
err = nil
}
return messages, err
}
// DeleteMessageByID deletes a message by its id.
func (d *GormDatabase) DeleteMessageByID(id uint) error {
return d.DB.Where("id = ?", id).Delete(&model.Message{}).Error
}
// DeleteMessagesByApplication deletes all messages from an application.
func (d *GormDatabase) DeleteMessagesByApplication(applicationID uint) error {
return d.DB.Where("application_id = ?", applicationID).Delete(&model.Message{}).Error
}
// DeleteMessagesByUser deletes all messages from a user.
func (d *GormDatabase) DeleteMessagesByUser(userID uint) error {
app, _ := d.GetApplicationsByUser(userID)
for _, app := range app {
d.DeleteMessagesByApplication(app.ID)
}
return nil
}