From dc8120ca614e3ae190ca1270d03e438c0f2f511b Mon Sep 17 00:00:00 2001 From: mindesbunister Date: Wed, 6 Aug 2025 00:20:33 +0200 Subject: [PATCH] fix: localStorage key consistency for Safe Paper Trading positions - Fixed conflicting localStorage keys causing positions to disappear - Added backward compatibility to load from both old and new key patterns - Standardized to safePaperTrading_ prefix for consistency - Updated reset function to clear all key patterns - Positions should now persist when navigating between pages --- app/safe-paper-trading/page.js | 22 ++++++-- test-localStorage-persistence.js | 87 ++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 test-localStorage-persistence.js diff --git a/app/safe-paper-trading/page.js b/app/safe-paper-trading/page.js index c983b6c..2a176e1 100644 --- a/app/safe-paper-trading/page.js +++ b/app/safe-paper-trading/page.js @@ -426,15 +426,18 @@ export default function SafePaperTradingPage() { } useEffect(() => { - // Load paper trading data from localStorage - const savedTrades = localStorage.getItem('safePaperTrades') - const savedBalance = localStorage.getItem('safePaperBalance') + // Load paper trading data from localStorage using consistent keys + // Check both old and new key patterns for backward compatibility + const savedTrades = localStorage.getItem('safePaperTrading_paperTrades') || localStorage.getItem('safePaperTrades') + const savedBalance = localStorage.getItem('safePaperTrading_paperBalance') || localStorage.getItem('safePaperBalance') if (savedTrades) { setPaperTrades(JSON.parse(savedTrades)) + console.log('šŸ“‚ Restored paper trades from localStorage') } if (savedBalance) { setPaperBalance(parseFloat(savedBalance)) + console.log('šŸ“‚ Restored paper balance from localStorage') } // Fetch AI learning status @@ -456,8 +459,12 @@ export default function SafePaperTradingPage() { } }, [selectedTimeframes]) - // Save to localStorage whenever data changes + // Save to localStorage whenever data changes - use consistent prefixed keys useEffect(() => { + localStorage.setItem('safePaperTrading_paperTrades', JSON.stringify(paperTrades)) + localStorage.setItem('safePaperTrading_paperBalance', paperBalance.toString()) + + // Also save to old keys for backward compatibility (temporarily) localStorage.setItem('safePaperTrades', JSON.stringify(paperTrades)) localStorage.setItem('safePaperBalance', paperBalance.toString()) }, [paperTrades, paperBalance]) @@ -803,8 +810,15 @@ export default function SafePaperTradingPage() { setPaperBalance(1000) setPaperTrades([]) setCurrentAnalysis(null) + + // Clear both key patterns to ensure complete reset localStorage.removeItem('safePaperTrades') localStorage.removeItem('safePaperBalance') + localStorage.removeItem('safePaperTrading_paperTrades') + localStorage.removeItem('safePaperTrading_paperBalance') + localStorage.removeItem('safePaperTrading_currentAnalysis') + + console.log('šŸ—‘ļø All safe paper trading data reset') } } diff --git a/test-localStorage-persistence.js b/test-localStorage-persistence.js new file mode 100644 index 0000000..32a8694 --- /dev/null +++ b/test-localStorage-persistence.js @@ -0,0 +1,87 @@ +/** + * Test script to check localStorage persistence for Safe Paper Trading + */ + +// Test the localStorage data that should persist +const testLocalStorageKeys = [ + 'safePaperTrades', + 'safePaperBalance', + 'safePaperTrading_paperTrades', + 'safePaperTrading_paperBalance', + 'safePaperTrading_currentAnalysis', + 'safePaperTrading_analysisHistory', + 'safePaperTrading_learningInsights' +]; + +console.log('šŸ“‹ Testing Safe Paper Trading localStorage persistence...\n'); + +// Create a sample trade to test with +const sampleTrade = { + id: 'TEST_' + Date.now(), + symbol: 'SOLUSD', + type: 'BUY', + size: 100, + entryPrice: 142.50, + timestamp: new Date().toISOString(), + status: 'OPEN', + confidence: 75, + reasoning: 'Test trade for localStorage persistence' +}; + +console.log('āœ… Sample trade created:', JSON.stringify(sampleTrade, null, 2)); + +// Test saving to both key patterns +const currentTrades = [sampleTrade]; +const currentBalance = 1000; + +console.log('\nšŸ’¾ Saving to localStorage with both key patterns...'); + +// Save using both patterns +localStorage.setItem('safePaperTrades', JSON.stringify(currentTrades)); +localStorage.setItem('safePaperBalance', currentBalance.toString()); +localStorage.setItem('safePaperTrading_paperTrades', JSON.stringify(currentTrades)); +localStorage.setItem('safePaperTrading_paperBalance', currentBalance.toString()); + +console.log('āœ… Data saved to localStorage'); + +// Test reading back +console.log('\nšŸ“– Reading back from localStorage...'); + +testLocalStorageKeys.forEach(key => { + const value = localStorage.getItem(key); + if (value) { + try { + const parsed = JSON.parse(value); + console.log(`āœ… ${key}: ${Array.isArray(parsed) ? `${parsed.length} trades` : `value: ${parsed}`}`); + } catch (e) { + console.log(`āœ… ${key}: ${value}`); + } + } else { + console.log(`āŒ ${key}: NOT FOUND`); + } +}); + +// Test the backward compatibility loading logic +console.log('\nšŸ”„ Testing backward compatibility loading...'); + +const loadedTrades = localStorage.getItem('safePaperTrading_paperTrades') || localStorage.getItem('safePaperTrades'); +const loadedBalance = localStorage.getItem('safePaperTrading_paperBalance') || localStorage.getItem('safePaperBalance'); + +if (loadedTrades) { + const trades = JSON.parse(loadedTrades); + console.log(`āœ… Successfully loaded ${trades.length} trades using backward compatibility`); + console.log(`šŸ“Š Trade details:`, trades[0]); +} else { + console.log('āŒ Failed to load trades using backward compatibility'); +} + +if (loadedBalance) { + console.log(`āœ… Successfully loaded balance: $${loadedBalance}`); +} else { + console.log('āŒ Failed to load balance using backward compatibility'); +} + +console.log('\nšŸŽÆ Test completed!'); +console.log('šŸ’” If you see this data when you refresh the page, localStorage persistence is working correctly.'); + +module.exports = { sampleTrade, testLocalStorageKeys };