summaryrefslogtreecommitdiff
path: root/internal/federation/federatingdb/create.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2023-04-05 20:10:05 +0200
committerLibravatar GitHub <noreply@github.com>2023-04-05 20:10:05 +0200
commit8d2a76c58ce018fb6cd6760a3607cf1ee720037a (patch)
tree5443b6a9828483c884150639b9cdee02bc850319 /internal/federation/federatingdb/create.go
parent[chore] Update templates license headers (#1672) (diff)
downloadgotosocial-8d2a76c58ce018fb6cd6760a3607cf1ee720037a.tar.xz
[bugfix] Add proper constraints on status faves, dedupe (#1674)
* [bugfix] Start working on multiple like issue * finish up
Diffstat (limited to 'internal/federation/federatingdb/create.go')
-rw-r--r--internal/federation/federatingdb/create.go12
1 files changed, 9 insertions, 3 deletions
diff --git a/internal/federation/federatingdb/create.go b/internal/federation/federatingdb/create.go
index 166ea34a9..b14a0597b 100644
--- a/internal/federation/federatingdb/create.go
+++ b/internal/federation/federatingdb/create.go
@@ -288,13 +288,19 @@ func (f *federatingDB) activityLike(ctx context.Context, asType vocab.Type, rece
fave, err := f.typeConverter.ASLikeToFave(ctx, like)
if err != nil {
- return fmt.Errorf("activityLike: could not convert Like to fave: %s", err)
+ return fmt.Errorf("activityLike: could not convert Like to fave: %w", err)
}
fave.ID = id.NewULID()
- if err := f.state.DB.Put(ctx, fave); err != nil {
- return fmt.Errorf("activityLike: database error inserting fave: %s", err)
+ if err := f.state.DB.PutStatusFave(ctx, fave); err != nil {
+ if errors.Is(err, db.ErrAlreadyExists) {
+ // The Like already exists in the database, which
+ // means we've already handled side effects. We can
+ // just return nil here and be done with it.
+ return nil
+ }
+ return fmt.Errorf("activityLike: database error inserting fave: %w", err)
}
f.state.Workers.EnqueueFederator(ctx, messages.FromFederator{