diff options
Diffstat (limited to 'internal/db/bundb/account.go')
-rw-r--r-- | internal/db/bundb/account.go | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/internal/db/bundb/account.go b/internal/db/bundb/account.go index 30510bb8e..cf02ad100 100644 --- a/internal/db/bundb/account.go +++ b/internal/db/bundb/account.go @@ -35,8 +35,9 @@ import ( ) type accountDB struct { - conn *DBConn - cache *cache.AccountCache + conn *DBConn + cache *cache.AccountCache + status *statusDB } func (a *accountDB) newAccountQ(account *gtsmodel.Account) *bun.SelectQuery { @@ -232,11 +233,12 @@ func (a *accountDB) CountAccountStatuses(ctx context.Context, accountID string) } 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) { - statuses := []*gtsmodel.Status{} + statusIDs := []string{} q := a.conn. NewSelect(). - Model(&statuses). + Table("statuses"). + Column("id"). Order("id DESC") if accountID != "" { @@ -295,14 +297,30 @@ func (a *accountDB) GetAccountStatuses(ctx context.Context, accountID string, li q = q.Where("visibility = ?", gtsmodel.VisibilityPublic) } - if err := q.Scan(ctx); err != nil { + if err := q.Scan(ctx, &statusIDs); err != nil { return nil, a.conn.ProcessError(err) } - if len(statuses) == 0 { + // Catch case of no statuses early + if len(statusIDs) == 0 { return nil, db.ErrNoEntries } + // Allocate return slice (will be at most len statusIDS) + statuses := make([]*gtsmodel.Status, 0, len(statusIDs)) + + for _, id := range statusIDs { + // Fetch from status from database by ID + status, err := a.status.GetStatusByID(ctx, id) + if err != nil { + logrus.Errorf("GetAccountStatuses: error getting status %q: %v", id, err) + continue + } + + // Append to return slice + statuses = append(statuses, status) + } + return statuses, nil } |