summaryrefslogtreecommitdiff
path: root/internal/processing/common
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2024-12-23 17:54:44 +0000
committerLibravatar GitHub <noreply@github.com>2024-12-23 17:54:44 +0000
commitfe8d5f23072c40a407723904eb5c54234879d58a (patch)
treedf80063f3238997de7144932d2d713321164ac1b /internal/processing/common
parent[chore] Stub /api/v1/announcements implementation (#3630) (diff)
downloadgotosocial-fe8d5f23072c40a407723904eb5c54234879d58a.tar.xz
[feature] add support for clients editing statuses and fetching status revision history (#3628)
* start adding client support for making status edits and viewing history * modify 'freshest' freshness window to be 5s, add typeutils test for status -> api edits * only populate the status edits when specifically requested * start adding some simple processor status edit tests * add test editing status but adding a poll * test edits appropriately adding poll expiry handlers * finish adding status edit tests * store both new and old revision emojis in status * add code comment * ensure the requester's account is populated before status edits * add code comments for status edit tests * update status edit form swagger comments * remove unused function * fix status source test * add more code comments, move media description check back to media process in status create * fix tests, add necessary form struct tag
Diffstat (limited to 'internal/processing/common')
-rw-r--r--internal/processing/common/status.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/internal/processing/common/status.go b/internal/processing/common/status.go
index da5cf1290..01f2ab72d 100644
--- a/internal/processing/common/status.go
+++ b/internal/processing/common/status.go
@@ -31,6 +31,40 @@ import (
"github.com/superseriousbusiness/gotosocial/internal/log"
)
+// GetOwnStatus fetches the given status with ID,
+// and ensures that it belongs to given requester.
+func (p *Processor) GetOwnStatus(
+ ctx context.Context,
+ requester *gtsmodel.Account,
+ targetID string,
+) (
+ *gtsmodel.Status,
+ gtserror.WithCode,
+) {
+ target, err := p.state.DB.GetStatusByID(ctx, targetID)
+ if err != nil && !errors.Is(err, db.ErrNoEntries) {
+ err := gtserror.Newf("error getting from db: %w", err)
+ return nil, gtserror.NewErrorInternalError(err)
+ }
+
+ switch {
+ case target == nil:
+ const text = "target status not found"
+ return nil, gtserror.NewErrorNotFound(
+ errors.New(text),
+ text,
+ )
+
+ case target.AccountID != requester.ID:
+ return nil, gtserror.NewErrorNotFound(
+ errors.New("status does not belong to requester"),
+ "target status not found",
+ )
+ }
+
+ return target, nil
+}
+
// GetTargetStatusBy fetches the target status with db load
// function, given the authorized (or, nil) requester's
// account. This returns an approprate gtserror.WithCode