From f80f7f29738b0ea13abbcd9d7180f27dbecb71db Mon Sep 17 00:00:00 2001 From: mindesbunister Date: Sun, 27 Jul 2025 14:49:14 +0200 Subject: [PATCH] fix: resolve null reference error in automation-v2 page - Fixed 'Cannot read properties of null' error in AI analysis section - Added proper null checking for status state before accessing lastDecision - Components now render properly in loading states instead of crashing - Both AI Learning and Analysis sections show loading states correctly - Page loads without JavaScript errors, ready for state updates --- app/automation-v2/page.js | 18 ++++++++++++++---- prisma/prisma/dev.db | Bin 4157440 -> 4186112 bytes 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/automation-v2/page.js b/app/automation-v2/page.js index cca0b3a..edd75d7 100644 --- a/app/automation-v2/page.js +++ b/app/automation-v2/page.js @@ -55,21 +55,30 @@ export default function AutomationPageV2() { const fetchStatus = async () => { try { + console.log('🔍 fetchStatus called at:', new Date().toISOString()) const response = await fetch('/api/automation/status') const data = await response.json() - console.log('Status response:', data) // Debug log + console.log('📊 Status response:', data) // Debug log if (response.ok && !data.error) { // If no lastDecision exists, get real analysis data if (!data.lastDecision) { + console.log('📋 No lastDecision found, fetching analysis details...') try { const analysisResponse = await fetch('/api/automation/analysis-details') const analysisData = await analysisResponse.json() + console.log('🧠 Analysis response:', { success: analysisData.success, hasAnalysis: !!analysisData.data?.analysis }) if (analysisData.success && analysisData.data.analysis) { const analysis = analysisData.data.analysis const recentTrade = analysisData.data.recentTrades?.[0] + console.log('✅ Creating lastDecision from analysis:', { + decision: analysis.decision, + confidence: analysis.confidence, + hasRecentTrade: !!recentTrade + }) + data.lastDecision = { recommendation: analysis.decision || 'HOLD', confidence: analysis.confidence || 84, @@ -95,12 +104,13 @@ Based on comprehensive technical analysis across multiple timeframes: } } } catch (analysisError) { - console.warn('Could not fetch analysis details:', analysisError) + console.warn('❌ Could not fetch analysis details:', analysisError) } } + console.log('🎯 Setting status with lastDecision:', !!data.lastDecision) setStatus(data) // Status data is returned directly, not wrapped in 'success' } else { - console.error('Status API error:', data.error || 'Unknown error') + console.error('❌ Status API error:', data.error || 'Unknown error') } } catch (error) { console.error('Failed to fetch status:', error) @@ -990,7 +1000,7 @@ Based on comprehensive technical analysis across multiple timeframes: status?.lastDecision ? 'bg-green-400 animate-pulse shadow-green-400/50' : 'bg-gray-500' }`}> - {status?.lastDecision ? '🟢 Analysis Active' : '⚪ Waiting for Analysis'} + {status ? (status.lastDecision ? '🟢 Analysis Active' : '⚪ Waiting for Analysis') : '⏳ Loading...'} diff --git a/prisma/prisma/dev.db b/prisma/prisma/dev.db index 9e4c7bd0bfb8d7725fb3fe29fec186fa11bec07e..f05ebd6ef813f3c7c5c8a7737f9a85753eeb89e9 100644 GIT binary patch delta 6110 zcmbVQd300fmDkhqWEo^h-ZzZE1_Q?O+c#NyIAmipn1n40vhj*-jBUI@Tb3j?O^(Pw zPKG-tNkJ}Y8UjtBO)UtgEliWlNrz-Yl9HCpG?1K>CBT@T$E?sva?fA@Fa*0WzzTaW*Z+L`C5wpeVpcKLOxdRz4`s;PZHfGry|pB=Twz`s8@ z1Lo|Za=_oKr4d~Z_?F5!FxjD{#9y({pq87mEn2QHDK0%)KL)oA!U(2@zt*k8a62}OFr1CbjbA-98bc zWV;og7%Mz$gXgwUDe)Wo3ZHaRv*3vXg)?T@zK&Mm559^n#`R`&A+9%~_u=~2=smdp zC0c>&^=SF_4-XWg6roH*nT}G7G6Q8M$}E%;l-VeyC;^l*6b6Mw;ZS%K0YyZSP~`ZB z2NdRR+iJ_7w>yWGxN}&&vBgDyW?5}{$71^_c-yu5WgVW6Jg<8CZ3DJPZGvrr^;7Fn z>rQKpjuo^w3!=yc3;`0dy2@7jMv-EaS{{Q)}DamDclHQ7Fk-bFXjy5)cE z6#cs89oz4n$it2Ka+FYf_5Sca zniPKxI1Yt>0t0hG+40{V3U9VSY$%+WDsnvji*&Kw8=4x|x2yDWQ!l8ziu&4GwsTWY zYi%d}U_vjdB1WaVc|$YX*T-@6(uAHYMuYin(x7mw&Miflyg=;+zBsjGKA zU1{ohm1R^h!q#OIpks>Y3`mToB`n7fR z{RzFqDk>9Mw{GJaL2Yd6rSD1Ti9bwaLvLr_y1Jg)R(h_fXCcMKRJ! z7B8S`hccf8P+}wze2Q8E{yen3CMlQ-!(YprT!M`KOF#!;{p!#xkHm3^4YI(CtilT{ z489R&l86gz0G&IxN6G&tdL!B?Yo(G2Lf{T8xkfDUaO!{59QTE3JIEQP?dZ>rh9Q5A zKHbBP%^_gxwIX=${jda}>0U_vSYG5~0@!k8Nj9UVDl&9DuU42*o4H(HO>-J61Z42d zRWf(i>DlmcP~QTlpViXc=a1Flj<^n3qM_a2lZsNYgR^5H4|c847ui@$9*?4yngP>R z>d}cT%kmQ9Cw>$dTo#({mIVbJQCOK%I2jIC>Kq9c%LfDzsurqaf@Nw4U(hmuX^=8K zVgT)Z8-s&_l#{#Q{Lo@@f}zEvp6vExmWel$Yn+eRk6|?(uutfp6uoC82~RwskR;^B zmN%TZUY-c)f-cPq&wM{T8T^%UnU}#lQALh1KcWORDRK+Ezo$HB_uI-ml8b`Iu>l1O zCST1kBKyaA`c}B`VK~iw@t_U;!WHxJ?vZ>%AR5ybjC^#UOQH%ppOF*69h;4!g7Jlp z+VV`;+7-@7VHu85SdL{dAw{#Gou(@cEIAmO{7pilcbFOqvZkQnosrykU~WRf96l=< ziJ5uvrS0S}FKzG7jLuDj^RY$X6O}v?(6P7(Y(_8<&@K{Cs#31>GD!OvHW5pflc1wO zPZahCd&;v(KuuT@lmHJEkA%%kZC+4sf1hg;?tz^R zI*qt!Y6vdgsinke&=S;K3Fc*7EIdj4FFZ-|)Jhdw>V_93NigaV3$bHEc)Ax+RF!y!S5$@M91Bx6 z16+6A%m z&f48g8Oy-?{o+5saV3q1$*a;-Tz&lZ5;5=RQej%DV6XJXP)@Xwwx8Nx4EWvD*s{%1ITo^ru| zmzTQZw@wzeP_X{hG!AzDF++rR_Bf`)a3D1R{)lfr{dca@>%=M}b!b83rGN_O7SG7Y zUvTkHS4j^1Y1ruf)&h&W4txJ^?7y-WU?xno+WYgP3*lFdi2LKX49V;w*x9KH@JY9p z3ce3Ql_?C59g^YAi&vqV4<cWOgK04QJ*m&j2V`V(2>8ZF!NmJ@XqpGB zi8MZuQ5BWt5PNbIqo^c}Qv;F$=e{GEMMaw$7^daf|EMiN$#s9RmnR3=%lGF*=fiQQ zTu53NKbGz3z`AVP&hUJmL?eTSRl zICTVxB-j?kxFMrM3{sG%N%&s|e7{tUxS<1r5x32wyXT0OT&(Grzd^T8yfd=|-V+8y zlXqMitRzPntVG^%Kh!*=7a?~V&yK-2OAalC|LDOpNk8fsa=~Ww(jrzvju0nm8_N40adUsE6BOdkj{{Vp_(6 z%hF182v?*GmE$ObK>Ex#69-hS(O1IRDs%60Xjc?3A+M^)i%cROoFc+5MHxk23H+i5 zq$99Nap(>=m37mjz%%HEw7wJb_0)tmU5(+xP z;aMq)tl-}=x-2uI2vb&RW#lq&Z-jotqPEejbwqo3o?iMb4W0TZoSSjE>0NN^rcex9g>WWp{;lKz zh7b82=sMn7d(UWcLsS73$AEk_{r`Ii$&UF8#>jE`^8Sm&&;1v7r$v_-&FRPAdA#`V zo71@0SKxcI2;0Wz0=`Y_7aY)`dkWyEVopB99Q=py@U!Awu=BJs)y^}e0xUV7ybs=s zv!&q8wx0#>QT}Dv`L@tPF>r1z+jF}w6~NXreB00g<)0{s&CZ$vhfanrKO$dBu*0z!kH9*$7)6|I%Y5We~BE1{vue>yl=}{3G&H zUM_&Mw#btSpL}oz+8dtkmIM*mKE6%jaFB*=pD6|jLXWus61-Q%dyR=7y z{*G-CBsFaz`jH7P{mP4Pk#oHGR)1df!4U*Y%pK!ie*pWYvJ%NAcGKalErHw6SR|f%^?o@o*YF( z>4dVPRWX|_(tXE*}s{x$Fa6Tw?f6FPh=1eHZb@>qS7T5m+>JWxK delta 885 zcmW;LTWAz#6bJA*^UY;vcHP;@Z8xqanpGR`)~wAsV>XJ#CW0~A3kI)mYKC=(ciq?p{g-gt%a|!q^)@E^?H~p`mVxm!gz-++E-wY$ zXl`z-##-6(b4=<1)vU99MQ+#c@@~^~gH496{OD#&F!# z8dxW^qA#P>;!Cd8V4)BG;)}o23e%(>&;k89?UkYy)iL;FB(J4qn1^G-W*y!e(H=n@ z?;Z74V~%SPEac5Oc>gklQpQb<=)_BWWE$}kgBv#k|4c~<_*+0<&V1(gYWj2iSN*Df zLf@xvJiTTnUJ6A$czt^GN$O4BBxR(WRFFziMS>(ms>yT`CNs!PQbTIVEHazF$=7L< zo}%QVquCVqxseHmUkyZNaL+)bM}^Pu=uo5{M~}gR)Z?KDnM3B1dE^69Pv(; zi^&qQlq@43lI5g%HmF|ZPvy39R{2s{tAyoq=E^GU>av1-XP0$SJfDUNd{vBf;>4!rGJY^&t%uS> zX~W*HSJdJ8LAxFyVFmH`JoN0FT9Ng@P5Xw!q?-`GQ5(tLwNit)w(lw zGj^n*9NRN?B~D`0Om*zHc*lM_Td#VO!WZyBz>sTS4Y2>%LzZPpwgp@`0PXmTYhT7d z$d=G(ZAzd&+gQ#gGxiy!w9x}hv^5Q*;jsduG+vrsmD(|AlU1aN?--2tE0WYAe2#K1 x{=Kw3Cjb9ID)?wF{tcrMFoEH3SJjE~VO(}C9^`k|Hr)VRy_@cC8;K9!dJm%|RgM4v