Task mentions (#926)
Co-authored-by: kolaente <k@knt.li> Reviewed-on: https://kolaente.dev/vikunja/api/pulls/926 Co-authored-by: konrad <konrad@kola-entertainments.de> Co-committed-by: konrad <konrad@kola-entertainments.de>
This commit is contained in:
@ -33,6 +33,8 @@ type DatabaseNotification struct {
|
||||
Notification interface{} `xorm:"json not null" json:"notification"`
|
||||
// The name of the notification
|
||||
Name string `xorm:"varchar(250) index not null" json:"name"`
|
||||
// The thing the notification is about. Used to check if a notification for this thing already happened or not.
|
||||
SubjectID int64 `xorm:"bigint null" json:"-"`
|
||||
|
||||
// When this notification is marked as read, this will be updated with the current timestamp.
|
||||
ReadAt time.Time `xorm:"datetime null" json:"read_at"`
|
||||
@ -65,6 +67,13 @@ func GetNotificationsForUser(s *xorm.Session, notifiableID int64, limit, start i
|
||||
return notifications, len(notifications), total, err
|
||||
}
|
||||
|
||||
func GetNotificationsForNameAndUser(s *xorm.Session, notifiableID int64, event string, subjectID int64) (notifications []*DatabaseNotification, err error) {
|
||||
notifications = []*DatabaseNotification{}
|
||||
err = s.Where("notifiable_id = ? AND name = ? AND subject_id = ?", notifiableID, event, subjectID).
|
||||
Find(¬ifications)
|
||||
return
|
||||
}
|
||||
|
||||
// CanMarkNotificationAsRead checks if a user can mark a notification as read.
|
||||
func CanMarkNotificationAsRead(s *xorm.Session, notification *DatabaseNotification, notifiableID int64) (can bool, err error) {
|
||||
can, err = s.
|
||||
|
@ -20,11 +20,10 @@ import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"code.vikunja.io/api/pkg/config"
|
||||
"code.vikunja.io/api/pkg/db"
|
||||
"code.vikunja.io/api/pkg/log"
|
||||
"code.vikunja.io/api/pkg/mail"
|
||||
|
||||
"code.vikunja.io/api/pkg/config"
|
||||
)
|
||||
|
||||
// SetupTests initializes all db tests
|
||||
|
@ -29,6 +29,15 @@ type Notification interface {
|
||||
Name() string
|
||||
}
|
||||
|
||||
type SubjectID interface {
|
||||
SubjectID() int64
|
||||
}
|
||||
|
||||
type NotificationWithSubject interface {
|
||||
Notification
|
||||
SubjectID
|
||||
}
|
||||
|
||||
// Notifiable is an entity which can be notified. Usually a user.
|
||||
type Notifiable interface {
|
||||
// Should return the email address this notifiable has.
|
||||
@ -82,6 +91,10 @@ func notifyDB(notifiable Notifiable, notification Notification) (err error) {
|
||||
Name: notification.Name(),
|
||||
}
|
||||
|
||||
if subject, is := notification.(SubjectID); is {
|
||||
dbNotification.SubjectID = subject.SubjectID()
|
||||
}
|
||||
|
||||
_, err = s.Insert(dbNotification)
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
|
Reference in New Issue
Block a user