mirror of
https://github.com/gotify/server.git
synced 2026-05-06 13:31:22 +08:00
* chore: Migrate github.com/jinzhu/gorm to gorm.io/gorm
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
* chore: drop singleton connection limit on sqlite3 backend
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
* enhance: database logging
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
* Revert "chore: drop singleton connection limit on sqlite3 backend"
This reverts commit b494a3bd1f.
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
* typo
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
* rename unique_index -> uniqueIndex
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
* drop uniqueIndex on primary key
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
* migrate fully to new gorm tag format
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
* specify unique index name
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
* remove pluginConf duplicate index
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
* disable auto migrate FK
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
---------
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
96 lines
3.0 KiB
Go
96 lines
3.0 KiB
Go
package database
|
|
|
|
import (
|
|
"github.com/gotify/server/v2/model"
|
|
"gorm.io/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("messages.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("messages.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("messages.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("messages.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
|
|
}
|