summaryrefslogtreecommitdiff
path: root/internal/db/bundb/account.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/db/bundb/account.go')
-rw-r--r--internal/db/bundb/account.go33
1 files changed, 28 insertions, 5 deletions
diff --git a/internal/db/bundb/account.go b/internal/db/bundb/account.go
index 937f4ba23..26959001f 100644
--- a/internal/db/bundb/account.go
+++ b/internal/db/bundb/account.go
@@ -350,7 +350,16 @@ func (a *accountDB) CountAccountStatuses(ctx context.Context, accountID string)
Count(ctx)
}
-func (a *accountDB) GetAccountStatuses(ctx context.Context, accountID string, limit int, excludeReplies bool, excludeReblogs bool, maxID string, minID string, pinnedOnly bool, mediaOnly bool, publicOnly bool) ([]*gtsmodel.Status, db.Error) {
+func (a *accountDB) CountAccountPinned(ctx context.Context, accountID string) (int, db.Error) {
+ return a.conn.
+ NewSelect().
+ TableExpr("? AS ?", bun.Ident("statuses"), bun.Ident("status")).
+ Where("? = ?", bun.Ident("status.account_id"), accountID).
+ Where("? IS NOT NULL", bun.Ident("status.pinned_at")).
+ Count(ctx)
+}
+
+func (a *accountDB) GetAccountStatuses(ctx context.Context, accountID string, limit int, excludeReplies bool, excludeReblogs bool, maxID string, minID string, mediaOnly bool, publicOnly bool) ([]*gtsmodel.Status, db.Error) {
statusIDs := []string{}
q := a.conn.
@@ -390,10 +399,6 @@ func (a *accountDB) GetAccountStatuses(ctx context.Context, accountID string, li
q = q.Where("? > ?", bun.Ident("status.id"), minID)
}
- if pinnedOnly {
- q = q.Where("? = ?", bun.Ident("status.pinned"), true)
- }
-
if mediaOnly {
// attachments are stored as a json object;
// this implementation differs between sqlite and postgres,
@@ -429,6 +434,24 @@ func (a *accountDB) GetAccountStatuses(ctx context.Context, accountID string, li
return a.statusesFromIDs(ctx, statusIDs)
}
+func (a *accountDB) GetAccountPinnedStatuses(ctx context.Context, accountID string) ([]*gtsmodel.Status, db.Error) {
+ statusIDs := []string{}
+
+ q := a.conn.
+ NewSelect().
+ TableExpr("? AS ?", bun.Ident("statuses"), bun.Ident("status")).
+ Column("status.id").
+ Where("? = ?", bun.Ident("status.account_id"), accountID).
+ Where("? IS NOT NULL", bun.Ident("status.pinned_at")).
+ Order("status.pinned_at DESC")
+
+ if err := q.Scan(ctx, &statusIDs); err != nil {
+ return nil, a.conn.ProcessError(err)
+ }
+
+ return a.statusesFromIDs(ctx, statusIDs)
+}
+
func (a *accountDB) GetAccountWebStatuses(ctx context.Context, accountID string, limit int, maxID string) ([]*gtsmodel.Status, db.Error) {
statusIDs := []string{}