From 802ba2bc5b17475eb4faed2a777d4a061a1a6930 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta Date: Tue, 17 Sep 2024 09:14:19 +0530 Subject: [PATCH] [server] Gracefully handle duplicate update req (#3301) ## Description ## Tests --- server/pkg/repo/userentity/data.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/server/pkg/repo/userentity/data.go b/server/pkg/repo/userentity/data.go index 88ce4181fd..fa6457ebfa 100644 --- a/server/pkg/repo/userentity/data.go +++ b/server/pkg/repo/userentity/data.go @@ -5,6 +5,7 @@ import ( "database/sql" "errors" "fmt" + "github.com/ente-io/museum/ente" model "github.com/ente-io/museum/ente/userentity" "github.com/ente-io/stacktrace" @@ -75,6 +76,16 @@ func (r *Repository) Update(ctx context.Context, userID int64, req model.UpdateE return stacktrace.Propagate(err, "") } if affected != 1 { + dbEntity, dbEntityErr := r.Get(ctx, userID, req.ID) + if dbEntityErr != nil { + return stacktrace.Propagate(dbEntityErr, fmt.Sprintf("failed to get entity for update with id=%s", req.ID)) + } + if dbEntity.IsDeleted { + return stacktrace.Propagate(ente.NewBadRequestWithMessage("entity is already deleted"), "") + } else if *dbEntity.EncryptedData == req.EncryptedData && *dbEntity.Header == req.Header { + logrus.WithField("id", req.ID).Info("entity is already updated") + return nil + } return stacktrace.Propagate(errors.New("exactly one row should be updated"), "") } return nil