diff options
author | 2023-02-25 13:16:30 +0100 | |
---|---|---|
committer | 2023-02-25 12:16:30 +0000 | |
commit | c27b4d7ed02cdabac00c3ddedb8201b74f745ec6 (patch) | |
tree | d80f621241fd67a4e5de2d21a8c24776552175f5 /internal/db/bundb/account.go | |
parent | [chore] Update gin to v1.9.0 (#1553) (diff) | |
download | gotosocial-c27b4d7ed02cdabac00c3ddedb8201b74f745ec6.tar.xz |
[feature] Client API endpoints + v. basic web view for pinned posts (#1547)
* implement status pin client api + web handler
* make test names + comments more descriptive
* don't use separate table for status pins
* remove unused add + remove checking
* tidy up + add some more tests
Diffstat (limited to 'internal/db/bundb/account.go')
-rw-r--r-- | internal/db/bundb/account.go | 33 |
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{} |