diff --git a/backend/handlers/payments/giftcards.go b/backend/handlers/payments/giftcards.go index 845825e..440beee 100644 --- a/backend/handlers/payments/giftcards.go +++ b/backend/handlers/payments/giftcards.go @@ -1,6 +1,7 @@ package payments import ( + "context" "database/sql" "encoding/json" "errors" diff --git a/backend/handlers/user/account.go b/backend/handlers/user/account.go index 62caaa8..c635dd7 100644 --- a/backend/handlers/user/account.go +++ b/backend/handlers/user/account.go @@ -9,6 +9,7 @@ import ( "log/slog" "net/http" "os" + "time" "crussell/db" "crussell/handlers/payments" @@ -53,13 +54,15 @@ func DeleteAccountHandler(w http.ResponseWriter, r *http.Request) { log.Printf("Panic recovered in S3 profile picture deletion: %v", r) } }() + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() bucket := os.Getenv("S3_PROFILE_PICS_BUCKET") if bucket == "" { bucket = "crussell-profile-pics" } // profiles/{userID}.jpg — matches UploadProfilePictureHandler key format key := fmt.Sprintf("profiles/%s.jpg", userID) - if err := s3.Client.Delete(context.Background(), bucket, key); err != nil { + if err := s3.Client.Delete(ctx, bucket, key); err != nil { log.Printf("Warning: Failed to delete profile picture for user %s: %v", userID, err) } }(profilePicURL.String) @@ -73,7 +76,9 @@ func DeleteAccountHandler(w http.ResponseWriter, r *http.Request) { log.Printf("Panic recovered in Square saved card cleanup: %v", r) } }() - rows, err := db.Conn.Query(context.Background(), + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + rows, err := db.Conn.Query(ctx, `SELECT square_card_id FROM user_saved_cards WHERE user_id = $1 AND deleted_at IS NULL`, userID) if err != nil { log.Printf("Warning: Failed to query saved cards for user %s: %v", userID, err) @@ -86,7 +91,7 @@ func DeleteAccountHandler(w http.ResponseWriter, r *http.Request) { log.Printf("Warning: Failed to scan card ID for user %s: %v", userID, err) continue } - if err := payments.SquareClient.DeleteCardOnFile(context.Background(), cardID); err != nil { + if err := payments.SquareClient.DeleteCardOnFile(ctx, cardID); err != nil { log.Printf("Warning: Failed to delete Square card %s for user %s: %v", cardID, userID, err) } }