Skip to content

fix: marketplace — snapshot héros en fallback RPC (Héros introuvable) - #388

Merged
thomasgermain93 merged 1 commit into
mainfrom
fix/marketplace-hero-snapshot
Mar 22, 2026
Merged

thomasgermain93 merged 1 commit into
mainfrom
fix/marketplace-hero-snapshot

Conversation

@thomasgermain93

Copy link
Copy Markdown
Owner

Root cause

list_hero_for_sale cherchait le héros dans la table player_heroes (cloud Supabase), mais les héros peuvent exister uniquement en localStorage si la synchronisation cloud n'a pas encore eu lieu.

→ RPC retournait { success: false, error: 'Héros introuvable.' } à chaque tentative de mise en vente.

Fix

SQL (nouvelle migration 20260322180000_fix_marketplace_hero_snapshot.sql)

list_hero_for_sale accepte maintenant un 4ème paramètre optionnel p_hero_snapshot JSONB DEFAULT NULL :

  • Si le héros est dans player_heroes → utilise les données DB (sécurisé)
  • Sinon si p_hero_snapshot fourni → utilise le snapshot client (fallback)
  • Sinon → erreur explicite "Héros introuvable. Synchronisez votre compte."

Frontend

  • useCreateListing accepte heroSnapshot?: MarketplaceHeroSnapshot
  • MarketplacePage construit le snapshot depuis l'objet Hero local et le passe au hook
  • CreateListingModal.onConfirm retourne maintenant (heroId, price, hero) au lieu de (heroId, price)

⚠️ Action requise : appliquer la migration Supabase

! supabase login
! supabase link --project-ref yowgyfruqfdbzymwakgk
! supabase db push

Ou coller le SQL de supabase/migrations/20260322180000_fix_marketplace_hero_snapshot.sql directement dans le SQL Editor Supabase.

Test plan

  • npm run build
  • Mettre un héros Epic/Legend en vente → doit réussir sans erreur
  • Annuler une annonce → héros doit réapparaître dans la collection
  • Acheter un héros → doit déduire les coins correctement

🤖 Generated with Claude Code

… introuvable'

Root cause : list_hero_for_sale cherchait le héros dans player_heroes (cloud),
mais les héros peuvent être uniquement en localStorage (pas encore sync).

- Nouvelle migration : list_hero_for_sale accepte p_hero_snapshot comme
  fallback quand le héros n'est pas dans player_heroes
- useMarketplace.ts : useCreateListing accepte heroSnapshot optionnel
- MarketplacePage.tsx : construit et passe le snapshot au hook
- CreateListingModal.tsx : onConfirm retourne aussi le héros complet

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@thomasgermain93
thomasgermain93 merged commit 1a7c77c into main Mar 22, 2026
0 of 2 checks passed
github-actions Bot added a commit that referenced this pull request Mar 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant