[server] Gracefully handle duplicate update req (#3301)

## Description

## Tests
This commit is contained in:
Neeraj Gupta
2024-09-17 09:14:19 +05:30
committed by GitHub
parent 9ce8470af5
commit 802ba2bc5b

View File

@@ -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