Albirew/nyaa-pantsu
Albirew
/
nyaa-pantsu
Archivé
1
0
Bifurcation 0
Ce dépôt a été archivé le 2022-05-07. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d'ajout, ni soumettre de changements.
nyaa-pantsu/models/notifications/system.go

76 lignes
2.4 KiB
Go

package notifications
import (
"errors"
"time"
"github.com/NyaaPantsu/nyaa/models"
"github.com/NyaaPantsu/nyaa/utils/cache"
"github.com/NyaaPantsu/nyaa/utils/validator/announcement"
)
const identifierAnnouncement = "system.announcement"
// NotifyAll notify all users through an announcement
func NotifyAll(msg string, expire time.Time) (*models.Notification, error) {
announcement := &models.Notification{
Content: msg,
Expire: expire,
Identifier: identifierAnnouncement,
Read: false,
UserID: 0,
}
err := models.ORM.Create(announcement).Error
return announcement, err
}
// UpdateAnnouncement updates an announcement
func UpdateAnnouncement(announcement *models.Notification, form *announcementValidator.CreateForm) error {
announcement.Content = form.Message
if form.Duration > 0 {
announcement.Expire = time.Now().Add(time.Hour * time.Duration(form.Duration))
}
if models.ORM.Model(announcement).UpdateColumn(announcement).Error != nil {
return errors.New("Announcement was not updated")
}
return nil
}
// CheckAnnouncement check if there are any new announcements
func CheckAnnouncement() ([]models.Notification, error) {
if retrieved, ok := cache.C.Get(identifierAnnouncement); ok {
return retrieved.([]models.Notification), nil
}
var announcements []models.Notification
err := models.ORM.Where("identifier = ? AND expire >= ?", identifierAnnouncement, time.Now().Format("2006-01-02")).Find(&announcements).Error
if err == nil {
cache.C.Set(identifierAnnouncement, announcements, time.Minute*5)
}
return announcements, err
}
// FindAll return all the announcements
func FindAll(limit int, offset int, conditions string, values ...interface{}) ([]models.Notification, int) {
var announcements []models.Notification
var nbAnnouncement int
if conditions == "" {
conditions += "identifier = ?"
} else {
conditions += "AND identifier = ?"
}
values = append(values, identifierAnnouncement)
models.ORM.Model(&announcements).Where(conditions, values...).Count(&nbAnnouncement)
models.ORM.Limit(limit).Offset(offset).Where(conditions, values...).Find(&announcements)
return announcements, nbAnnouncement
}
// FindByID return the notification by its ID
func FindByID(id uint) (*models.Notification, error) {
d := &models.Notification{}
err := models.ORM.Where("id = ?", id).Find(d).Error
if err != nil {
return d, err
}
return d, nil
}