summaryrefslogtreecommitdiff
path: root/internal/db/bundb/status.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/db/bundb/status.go')
-rw-r--r--internal/db/bundb/status.go44
1 files changed, 12 insertions, 32 deletions
diff --git a/internal/db/bundb/status.go b/internal/db/bundb/status.go
index 2b33b84e9..20ca843be 100644
--- a/internal/db/bundb/status.go
+++ b/internal/db/bundb/status.go
@@ -26,36 +26,16 @@ import (
"fmt"
"time"
- "codeberg.org/gruf/go-cache/v3/result"
"github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
"github.com/superseriousbusiness/gotosocial/internal/log"
+ "github.com/superseriousbusiness/gotosocial/internal/state"
"github.com/uptrace/bun"
)
type statusDB struct {
- conn *DBConn
- cache *result.Cache[*gtsmodel.Status]
- accounts *accountDB
- emojis *emojiDB
- mentions *mentionDB
-}
-
-func (s *statusDB) init() {
- // Initialize status result cache
- s.cache = result.NewSized([]result.Lookup{
- {Name: "ID"},
- {Name: "URI"},
- {Name: "URL"},
- }, func(s1 *gtsmodel.Status) *gtsmodel.Status {
- s2 := new(gtsmodel.Status)
- *s2 = *s1
- return s2
- }, 1000)
-
- // Set cache TTL and start sweep routine
- s.cache.SetTTL(time.Minute*5, false)
- s.cache.Start(time.Second * 10)
+ conn *DBConn
+ state *state.State
}
func (s *statusDB) newStatusQ(status interface{}) *bun.SelectQuery {
@@ -111,7 +91,7 @@ func (s *statusDB) GetStatusByURL(ctx context.Context, url string) (*gtsmodel.St
func (s *statusDB) getStatus(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Status) error, keyParts ...any) (*gtsmodel.Status, db.Error) {
// Fetch status from database cache with loader callback
- status, err := s.cache.Load(lookup, func() (*gtsmodel.Status, error) {
+ status, err := s.state.Caches.GTS.Status().Load(lookup, func() (*gtsmodel.Status, error) {
var status gtsmodel.Status
// Not cached! Perform database query
@@ -149,14 +129,14 @@ func (s *statusDB) getStatus(ctx context.Context, lookup string, dbQuery func(*g
}
// Set the status author account
- status.Account, err = s.accounts.GetAccountByID(ctx, status.AccountID)
+ status.Account, err = s.state.DB.GetAccountByID(ctx, status.AccountID)
if err != nil {
return nil, fmt.Errorf("error getting status account: %w", err)
}
if id := status.BoostOfAccountID; id != "" {
// Set boost of status' author account
- status.BoostOfAccount, err = s.accounts.GetAccountByID(ctx, id)
+ status.BoostOfAccount, err = s.state.DB.GetAccountByID(ctx, id)
if err != nil {
return nil, fmt.Errorf("error getting boosted status account: %w", err)
}
@@ -164,7 +144,7 @@ func (s *statusDB) getStatus(ctx context.Context, lookup string, dbQuery func(*g
if id := status.InReplyToAccountID; id != "" {
// Set in-reply-to status' author account
- status.InReplyToAccount, err = s.accounts.GetAccountByID(ctx, id)
+ status.InReplyToAccount, err = s.state.DB.GetAccountByID(ctx, id)
if err != nil {
return nil, fmt.Errorf("error getting in reply to status account: %w", err)
}
@@ -172,7 +152,7 @@ func (s *statusDB) getStatus(ctx context.Context, lookup string, dbQuery func(*g
if len(status.EmojiIDs) > 0 {
// Fetch status emojis
- status.Emojis, err = s.emojis.emojisFromIDs(ctx, status.EmojiIDs)
+ status.Emojis, err = s.state.DB.GetEmojisByIDs(ctx, status.EmojiIDs)
if err != nil {
return nil, fmt.Errorf("error getting status emojis: %w", err)
}
@@ -180,7 +160,7 @@ func (s *statusDB) getStatus(ctx context.Context, lookup string, dbQuery func(*g
if len(status.MentionIDs) > 0 {
// Fetch status mentions
- status.Mentions, err = s.mentions.GetMentions(ctx, status.MentionIDs)
+ status.Mentions, err = s.state.DB.GetMentions(ctx, status.MentionIDs)
if err != nil {
return nil, fmt.Errorf("error getting status mentions: %w", err)
}
@@ -190,7 +170,7 @@ func (s *statusDB) getStatus(ctx context.Context, lookup string, dbQuery func(*g
}
func (s *statusDB) PutStatus(ctx context.Context, status *gtsmodel.Status) db.Error {
- return s.cache.Store(status, func() error {
+ return s.state.Caches.GTS.Status().Store(status, func() error {
// It is safe to run this database transaction within cache.Store
// as the cache does not attempt a mutex lock until AFTER hook.
//
@@ -308,7 +288,7 @@ func (s *statusDB) UpdateStatus(ctx context.Context, status *gtsmodel.Status) db
}
// Drop any old value from cache by this ID
- s.cache.Invalidate("ID", status.ID)
+ s.state.Caches.GTS.Status().Invalidate("ID", status.ID)
return nil
}
@@ -347,7 +327,7 @@ func (s *statusDB) DeleteStatusByID(ctx context.Context, id string) db.Error {
}
// Drop any old value from cache by this ID
- s.cache.Invalidate("ID", id)
+ s.state.Caches.GTS.Status().Invalidate("ID", id)
return nil
}