summaryrefslogtreecommitdiff
path: root/internal/db
diff options
context:
space:
mode:
Diffstat (limited to 'internal/db')
-rw-r--r--internal/db/db.go2
-rw-r--r--internal/db/pg/pg.go29
2 files changed, 31 insertions, 0 deletions
diff --git a/internal/db/db.go b/internal/db/db.go
index 9ad811580..e71484a6d 100644
--- a/internal/db/db.go
+++ b/internal/db/db.go
@@ -284,6 +284,8 @@ type DB interface {
// It will use the given filters and try to return as many statuses up to the limit as possible.
GetHomeTimelineForAccount(accountID string, maxID string, sinceID string, minID string, limit int, local bool) ([]*gtsmodel.Status, error)
+ GetNotificationsForAccount(accountID string, limit int, maxID string) ([]*gtsmodel.Notification, error)
+
/*
USEFUL CONVERSION FUNCTIONS
*/
diff --git a/internal/db/pg/pg.go b/internal/db/pg/pg.go
index 7f65055d6..9b6c7a114 100644
--- a/internal/db/pg/pg.go
+++ b/internal/db/pg/pg.go
@@ -1138,6 +1138,35 @@ func (ps *postgresService) GetHomeTimelineForAccount(accountID string, maxID str
return statuses, nil
}
+func (ps *postgresService) GetNotificationsForAccount(accountID string, limit int, maxID string) ([]*gtsmodel.Notification, error) {
+ notifications := []*gtsmodel.Notification{}
+
+ q := ps.conn.Model(&notifications).Where("target_account_id = ?", accountID)
+
+
+ if maxID != "" {
+ n := &gtsmodel.Notification{}
+ if err := ps.conn.Model(n).Where("id = ?", maxID).Select(); err != nil {
+ return nil, err
+ }
+ q = q.Where("created_at < ?", n.CreatedAt)
+ }
+
+ if limit != 0 {
+ q = q.Limit(limit)
+ }
+
+ q = q.Order("created_at DESC")
+
+ if err := q.Select(); err != nil {
+ if err != pg.ErrNoRows {
+ return nil, err
+ }
+
+ }
+ return notifications, nil
+}
+
/*
CONVERSION FUNCTIONS
*/