summaryrefslogtreecommitdiff
path: root/internal/db
diff options
context:
space:
mode:
Diffstat (limited to 'internal/db')
-rw-r--r--internal/db/account.go2
-rw-r--r--internal/db/bundb/account.go32
-rw-r--r--internal/db/bundb/account_test.go6
3 files changed, 40 insertions, 0 deletions
diff --git a/internal/db/account.go b/internal/db/account.go
index 7e7d1de43..015621632 100644
--- a/internal/db/account.go
+++ b/internal/db/account.go
@@ -73,6 +73,8 @@ type Account interface {
// or replies.
GetAccountWebStatuses(ctx context.Context, accountID string, limit int, maxID string) ([]*gtsmodel.Status, Error)
+ GetBookmarks(ctx context.Context, accountID string, limit int, maxID string, minID string) ([]*gtsmodel.StatusBookmark, Error)
+
GetAccountBlocks(ctx context.Context, accountID string, maxID string, sinceID string, limit int) ([]*gtsmodel.Account, string, string, Error)
// GetAccountLastPosted simply gets the timestamp of the most recent post by the account.
diff --git a/internal/db/bundb/account.go b/internal/db/bundb/account.go
index 9f3fc8a16..01601e540 100644
--- a/internal/db/bundb/account.go
+++ b/internal/db/bundb/account.go
@@ -442,6 +442,38 @@ func (a *accountDB) GetAccountWebStatuses(ctx context.Context, accountID string,
return a.statusesFromIDs(ctx, statusIDs)
}
+func (a *accountDB) GetBookmarks(ctx context.Context, accountID string, limit int, maxID string, minID string) ([]*gtsmodel.StatusBookmark, db.Error) {
+ bookmarks := []*gtsmodel.StatusBookmark{}
+
+ q := a.conn.
+ NewSelect().
+ TableExpr("? AS ?", bun.Ident("status_bookmarks"), bun.Ident("status_bookmark")).
+ Order("status_bookmark.id DESC").
+ Where("? = ?", bun.Ident("status_bookmark.account_id"), accountID)
+
+ if accountID == "" {
+ return nil, errors.New("must provide an account")
+ }
+
+ if limit != 0 {
+ q = q.Limit(limit)
+ }
+
+ if maxID != "" {
+ q = q.Where("? < ?", bun.Ident("status_bookmark.id"), maxID)
+ }
+
+ if minID != "" {
+ q = q.Where("? > ?", bun.Ident("status_bookmark.id"), minID)
+ }
+
+ if err := q.Scan(ctx, &bookmarks); err != nil {
+ return nil, a.conn.ProcessError(err)
+ }
+
+ return bookmarks, nil
+}
+
func (a *accountDB) GetAccountBlocks(ctx context.Context, accountID string, maxID string, sinceID string, limit int) ([]*gtsmodel.Account, string, string, db.Error) {
blocks := []*gtsmodel.Block{}
diff --git a/internal/db/bundb/account_test.go b/internal/db/bundb/account_test.go
index bf85f14f4..e63956f87 100644
--- a/internal/db/bundb/account_test.go
+++ b/internal/db/bundb/account_test.go
@@ -208,6 +208,12 @@ func (suite *AccountTestSuite) TestInsertAccountWithDefaults() {
suite.False(*newAccount.HideCollections)
}
+func (suite *AccountTestSuite) TestGettingBookmarksWithNoAccount() {
+ statuses, err := suite.db.GetBookmarks(context.Background(), "", 10, "", "")
+ suite.Error(err)
+ suite.Nil(statuses)
+}
+
func TestAccountTestSuite(t *testing.T) {
suite.Run(t, new(AccountTestSuite))
}