From 8d2a76c58ce018fb6cd6760a3607cf1ee720037a Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Wed, 5 Apr 2023 20:10:05 +0200 Subject: [bugfix] Add proper constraints on status faves, dedupe (#1674) * [bugfix] Start working on multiple like issue * finish up --- internal/federation/federatingdb/create.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'internal/federation/federatingdb/create.go') 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{ -- cgit v1.2.3