diff --git a/appview/db/profile.go b/appview/db/profile.go index 736c24e8..5d406024 100644 --- a/appview/db/profile.go +++ b/appview/db/profile.go @@ -130,9 +130,15 @@ func monthsBetween(from, to time.Time) int { return years*12 + months } -func UpsertProfile(tx *sql.Tx, profile *models.Profile) error { +func UpsertProfile(e *DB, profile *models.Profile) error { + tx, err := e.Begin() + if err != nil { + return err + } + defer tx.Rollback() + // update links - _, err := tx.Exec(`delete from profile_links where did = ?`, profile.Did) + _, err = tx.Exec(`delete from profile_links where did = ?`, profile.Did) if err != nil { return err } @@ -228,6 +234,10 @@ func UpsertProfile(tx *sql.Tx, profile *models.Profile) error { return err } } + + if err := tx.Commit(); err != nil { + return err + } return nil } diff --git a/appview/ingester.go b/appview/ingester.go index 88848e73..af522ca3 100644 --- a/appview/ingester.go +++ b/appview/ingester.go @@ -598,26 +598,16 @@ func (i *Ingester) ingestProfile(ctx context.Context, e *jmodels.Event, l *slog. PreferredHandle: preferredHandle, } - tx, err := i.Db.Begin() - if err != nil { - return fmt.Errorf("failed to start transaction: %w", err) - } - defer tx.Rollback() - - err = db.ValidateProfile(tx, &profile) + err = db.ValidateProfile(i.Db, &profile) if err != nil { return fmt.Errorf("invalid profile record") } - err = db.UpsertProfile(tx, &profile) + err = db.UpsertProfile(i.Db, &profile) if err != nil { return fmt.Errorf("upserting profile: %w", err) } - err = tx.Commit() - if err != nil { - return fmt.Errorf("tx.Commit: %w", err) - } if i.Cache != nil { pipe := i.Cache.Pipeline() didKey := fmt.Sprintf(cache.PreferredHandleByDid, did) diff --git a/appview/oauth/handler.go b/appview/oauth/handler.go index c06c06ff..3518b02f 100644 --- a/appview/oauth/handler.go +++ b/appview/oauth/handler.go @@ -336,14 +336,8 @@ func (o *OAuth) ensureTangledProfile(sessData *oauth.ClientSessionData) { return } - tx, err := o.Db.BeginTx(ctx, nil) - if err != nil { - l.Error("failed to start transaction", "err", err) - return - } - emptyProfile := &models.Profile{Did: did} - if err := db.UpsertProfile(tx, emptyProfile); err != nil { + if err := db.UpsertProfile(o.Db, emptyProfile); err != nil { l.Error("failed to create empty profile in DB", "err", err) return } diff --git a/appview/state/profile.go b/appview/state/profile.go index a511d6e0..70b3d7c1 100644 --- a/appview/state/profile.go +++ b/appview/state/profile.go @@ -884,20 +884,6 @@ func (s *State) UpdateProfilePins(w http.ResponseWriter, r *http.Request) { func (s *State) updateProfile(profile *models.Profile, w http.ResponseWriter, r *http.Request) { l := s.logger.With("handler", "updateProfile") user := s.oauth.GetMultiAccountUser(r) - tx, err := s.db.BeginTx(r.Context(), nil) - if err != nil { - l.Error("failed to start transaction", "err", err) - s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") - return - } - defer tx.Rollback() - - err = db.UpsertProfile(tx, profile) - if err != nil { - l.Error("failed to update profile", "err", err) - s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") - return - } client, err := s.oauth.AuthorizedClient(r) if err != nil { @@ -952,7 +938,7 @@ func (s *State) updateProfile(profile *models.Profile, w http.ResponseWriter, r return } - if err := tx.Commit(); err != nil { + if err := db.UpsertProfile(s.db, profile); err != nil { // db failed, but PDS operation succeed. // log error and continue l.Error("failed to update profile in DB", "err", err) @@ -1193,15 +1179,7 @@ func (s *State) UploadProfileAvatar(w http.ResponseWriter, r *http.Request) { } profile.Avatar = uploadBlobResp.Blob.Ref.String() - tx, err := s.db.BeginTx(r.Context(), nil) - if err != nil { - l.Error("failed to start transaction", "err", err) - s.pages.HxRefresh(w) - w.WriteHeader(http.StatusOK) - return - } - - err = db.UpsertProfile(tx, profile) + err = db.UpsertProfile(s.db, profile) if err != nil { l.Error("failed to update profile in DB", "err", err) s.pages.HxRefresh(w) @@ -1271,15 +1249,7 @@ func (s *State) RemoveProfileAvatar(w http.ResponseWriter, r *http.Request) { } profile.Avatar = "" - tx, err := s.db.BeginTx(r.Context(), nil) - if err != nil { - l.Error("failed to start transaction", "err", err) - s.pages.HxRefresh(w) - w.WriteHeader(http.StatusOK) - return - } - - err = db.UpsertProfile(tx, profile) + err = db.UpsertProfile(s.db, profile) if err != nil { l.Error("failed to update profile in DB", "err", err) s.pages.HxRefresh(w)