diff options
Diffstat (limited to 'internal/processing')
-rw-r--r-- | internal/processing/status/bookmark.go | 62 |
1 files changed, 37 insertions, 25 deletions
diff --git a/internal/processing/status/bookmark.go b/internal/processing/status/bookmark.go index 778492c71..ae61696a8 100644 --- a/internal/processing/status/bookmark.go +++ b/internal/processing/status/bookmark.go @@ -20,42 +20,23 @@ package status import ( "context" "errors" - "fmt" apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" "github.com/superseriousbusiness/gotosocial/internal/db" + "github.com/superseriousbusiness/gotosocial/internal/gtscontext" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/id" ) -func (p *Processor) getBookmarkableStatus(ctx context.Context, requestingAccount *gtsmodel.Account, targetStatusID string) (*gtsmodel.Status, string, gtserror.WithCode) { - targetStatus, errWithCode := p.c.GetVisibleTargetStatus(ctx, - requestingAccount, - targetStatusID, - nil, // default freshness - ) - if errWithCode != nil { - return nil, "", errWithCode - } - - bookmarkID, err := p.state.DB.GetStatusBookmarkID(ctx, requestingAccount.ID, targetStatus.ID) - if err != nil && !errors.Is(err, db.ErrNoEntries) { - err = fmt.Errorf("getBookmarkTarget: error checking existing bookmark: %w", err) - return nil, "", gtserror.NewErrorInternalError(err) - } - - return targetStatus, bookmarkID, nil -} - // BookmarkCreate adds a bookmark for the requestingAccount, targeting the given status (no-op if bookmark already exists). func (p *Processor) BookmarkCreate(ctx context.Context, requestingAccount *gtsmodel.Account, targetStatusID string) (*apimodel.Status, gtserror.WithCode) { - targetStatus, existingBookmarkID, errWithCode := p.getBookmarkableStatus(ctx, requestingAccount, targetStatusID) + targetStatus, existing, errWithCode := p.getBookmarkableStatus(ctx, requestingAccount, targetStatusID) if errWithCode != nil { return nil, errWithCode } - if existingBookmarkID != "" { + if existing != nil { // Status is already bookmarked. return p.c.GetAPIStatus(ctx, requestingAccount, targetStatus) } @@ -86,18 +67,18 @@ func (p *Processor) BookmarkCreate(ctx context.Context, requestingAccount *gtsmo // BookmarkRemove removes a bookmark for the requesting account, targeting the given status (no-op if bookmark doesn't exist). func (p *Processor) BookmarkRemove(ctx context.Context, requestingAccount *gtsmodel.Account, targetStatusID string) (*apimodel.Status, gtserror.WithCode) { - targetStatus, existingBookmarkID, errWithCode := p.getBookmarkableStatus(ctx, requestingAccount, targetStatusID) + targetStatus, existing, errWithCode := p.getBookmarkableStatus(ctx, requestingAccount, targetStatusID) if errWithCode != nil { return nil, errWithCode } - if existingBookmarkID == "" { + if existing == nil { // Status isn't bookmarked. return p.c.GetAPIStatus(ctx, requestingAccount, targetStatus) } // We have a bookmark to remove. - if err := p.state.DB.DeleteStatusBookmark(ctx, existingBookmarkID); err != nil { + if err := p.state.DB.DeleteStatusBookmarkByID(ctx, existing.ID); err != nil { err = gtserror.Newf("error removing status bookmark: %w", err) return nil, gtserror.NewErrorInternalError(err) } @@ -109,3 +90,34 @@ func (p *Processor) BookmarkRemove(ctx context.Context, requestingAccount *gtsmo return p.c.GetAPIStatus(ctx, requestingAccount, targetStatus) } + +func (p *Processor) getBookmarkableStatus( + ctx context.Context, + requester *gtsmodel.Account, + statusID string, +) ( + *gtsmodel.Status, + *gtsmodel.StatusBookmark, + gtserror.WithCode, +) { + target, errWithCode := p.c.GetVisibleTargetStatus(ctx, + requester, + statusID, + nil, // default freshness + ) + if errWithCode != nil { + return nil, nil, errWithCode + } + + bookmark, err := p.state.DB.GetStatusBookmark( + gtscontext.SetBarebones(ctx), + requester.ID, + statusID, + ) + if err != nil && !errors.Is(err, db.ErrNoEntries) { + err := gtserror.Newf("error getting bookmark: %w", err) + return nil, nil, gtserror.NewErrorInternalError(err) + } + + return target, bookmark, nil +} |