From fd65df296286dc2db52a7271fb04c088db305949 Mon Sep 17 00:00:00 2001 From: spinline Date: Wed, 11 Feb 2026 21:53:53 +0300 Subject: [PATCH] fix(setup): add logging and error details for setup debugging --- Cargo.lock | 1 + frontend/src/components/auth/setup.rs | 3 ++- shared/Cargo.toml | 1 + shared/src/db.rs | 13 +++++++++-- shared/src/server_fns/auth.rs | 32 ++++++++++++++++++++++---- vibetorrent.db | Bin 45056 -> 4096 bytes vibetorrent.db-shm | Bin 0 -> 32768 bytes vibetorrent.db-wal | Bin 0 -> 78312 bytes 8 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 vibetorrent.db-shm create mode 100644 vibetorrent.db-wal diff --git a/Cargo.lock b/Cargo.lock index 7887a70..efa2514 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3761,6 +3761,7 @@ dependencies = [ "struct-patch", "thiserror 2.0.18", "tokio", + "tracing", "utoipa", ] diff --git a/frontend/src/components/auth/setup.rs b/frontend/src/components/auth/setup.rs index 10ba0af..832344a 100644 --- a/frontend/src/components/auth/setup.rs +++ b/frontend/src/components/auth/setup.rs @@ -41,7 +41,8 @@ pub fn Setup() -> impl IntoView { } Err(e) => { log::error!("Setup failed: {:?}", e); - error.1.set(Some("Kurulum sırasında bir hata oluştu".to_string())); + // Hatanın sadece mesaj kısmını almaya çalışalım, yoksa full struct basılabilir + error.1.set(Some(format!("Hata: {}", e))); loading.1.set(false); } } diff --git a/shared/Cargo.toml b/shared/Cargo.toml index 0dd77ac..5606b4d 100644 --- a/shared/Cargo.toml +++ b/shared/Cargo.toml @@ -10,6 +10,7 @@ struct-patch = "0.5" rmp-serde = "1.3" bytes = "1" http = "1" +tracing = "0.1" # Leptos 0.8.7 leptos = { version = "0.8.15", features = ["nightly", "msgpack"] } diff --git a/shared/src/db.rs b/shared/src/db.rs index 541cab6..1b8b11e 100644 --- a/shared/src/db.rs +++ b/shared/src/db.rs @@ -28,8 +28,17 @@ impl Db { } async fn run_migrations(&self) -> Result<()> { - sqlx::migrate!("./migrations").run(&self.pool).await?; - Ok(()) + tracing::info!("Starting database migrations..."); + match sqlx::migrate!("./migrations").run(&self.pool).await { + Ok(_) => { + tracing::info!("Database migrations completed successfully."); + Ok(()) + } + Err(e) => { + tracing::error!("Database migration failed: {}", e); + Err(e.into()) + } + } } // --- User Operations --- diff --git a/shared/src/server_fns/auth.rs b/shared/src/server_fns/auth.rs index a7d7e07..fe6ee68 100644 --- a/shared/src/server_fns/auth.rs +++ b/shared/src/server_fns/auth.rs @@ -24,9 +24,19 @@ pub struct SetupStatus { pub async fn get_setup_status() -> Result { use crate::DbContext; - let db_context = use_context::().ok_or_else(|| ServerFnError::new("DB Context missing"))?; + tracing::info!("Checking setup status..."); + let db_context = use_context::().ok_or_else(|| { + tracing::error!("DB Context missing in GetSetupStatus"); + ServerFnError::new("DB Context missing") + })?; + let has_users = db_context.db.has_users().await - .map_err(|e| ServerFnError::new(format!("DB error: {}", e)))?; + .map_err(|e| { + tracing::error!("DB error in GetSetupStatus: {}", e); + ServerFnError::new(format!("DB error: {}", e)) + })?; + + tracing::info!("Setup status: completed={}", has_users); Ok(SetupStatus { completed: has_users, @@ -37,21 +47,33 @@ pub async fn get_setup_status() -> Result { pub async fn setup(username: String, password: String) -> Result<(), ServerFnError> { use crate::DbContext; - let db_context = use_context::().ok_or_else(|| ServerFnError::new("DB Context missing"))?; + tracing::info!("Attempting setup for user: {}", username); + let db_context = use_context::().ok_or_else(|| { + tracing::error!("DB Context missing in Setup"); + ServerFnError::new("DB Context missing") + })?; // Check if setup is already done let has_users = db_context.db.has_users().await.unwrap_or(false); if has_users { + tracing::warn!("Setup attempt blocked: Setup already completed"); return Err(ServerFnError::new("Setup already completed")); } // Hash password (low cost for MIPS) let password_hash = bcrypt::hash(&password, 6) - .map_err(|_| ServerFnError::new("Hashing error"))?; + .map_err(|e| { + tracing::error!("Hashing error: {}", e); + ServerFnError::new("Hashing error") + })?; db_context.db.create_user(&username, &password_hash).await - .map_err(|e| ServerFnError::new(format!("DB error: {}", e)))?; + .map_err(|e| { + tracing::error!("Failed to create user: {}", e); + ServerFnError::new(format!("DB error: {}", e)) + })?; + tracing::info!("Setup completed successfully for user: {}", username); Ok(()) } diff --git a/vibetorrent.db b/vibetorrent.db index 09271812f0ede885fd2e1718664626fda0e81df5..7ee7c113a09428e4daafacb6e70a35d18573e608 100644 GIT binary patch delta 26 gcmZp8z|^2HL7J73fq{W>Vxv8fp;uL~DPRsi09$(o(EtDd literal 45056 zcmeI)&u`mg7zc3MX_6*w7m%1d2}OD(iqx>B#Oa!9MQBY^w+c;@HgVQzf zVy7!b0#bHBLU7|caTrJ-RUkm@wiAB=NDKiN#0d`5F04Bs;I)%oiSihtyN z?bm)j?`x;=+cvk9(k+c#DOXF1MaG!N7>;A62w@n8qtgJLTFFgU`dV-3l0CG3+$zV6 z?o@^X4;a7yb>_r7fm=g2POJ`oGE^G4Jg5x}&`cx?LX%#gF-zi{m?ewZEu#gY;01Aj>ihc_6-^(O3gYlU#)72r4?lQm0^bZOUVV1 z%!sq`d`cpTd^SsuF58(oDZa4i4<-6N{Ib9@P9rz9Xw|e$X`>(2;zD=ezWS8g%Ljw( zZm!WlnrYg-!)z`+ZE&sJCYM#-(2PcahqxLs)=aG`AM$JwHTkwHdQ~&qB5mJdHj@>T zb7|Xuq*+&pWW`yLDkQ`lvGdFky%6$;p7nV6MDRF=);Y^UYt36f@AC3I&+cA!Vs@%> zW_@kZI$8hNGaiO&ch2^vZtn|(^?CT``Qt)%PFxn8g?l%|diije zz3z5`m1#%WmP`72RcYJ?I^J__1f5$qHMXcd?ImP7IY+OT!`Dhfq@W$#XWCI3#kyfy z%H}5R>9mf64*l>dI=0U@b~kG(y>*ymI+IC>@$|udjZ(F!sT*dkM5a@j>5ejOTT^Rx z*s`V5_G+GftK<1Y=Q$6b3m?bYi6IM}IWGDk({F#!4AF@T%rk*KIzxg01Rwwb2tWV= z5P$##AOHafK;TgVtDKh=#(bMD&VG7D+MZ!XBhgqm5)BIxBAlBP#wN#O!tG1@zkRUt z?(OHutrykLp1gC)%w}lSz5D5h;uFECFQqRPmPAAh!9+xzI$+q+-9bp0#ou0eiS{_dw|X5P5@)YtbvUs8+Y009U<00Izz00bZa0SG_<0ucBQ1un53hOfKFltM{2hNEl4k=XD=RDE@H zB9U3znOUfwdtqzw0{s)I+A9;rg~Vuiz8WhoX3uWLYL#mn>#0+u4FV8=00bZa0SG_<0uX=z1Ry{KF#eBj009U< z00Izz00bZa0SG_<0ubnZ0gV6mej6h~2tWV=5P$##AOHafKmY;|fB?q-(FY&^0SG_< s0uX=z1Rwwb2tWV=y)S_A|K4w7Lo!q5vGz1I$QRI*}of znE8Hbq}#jI-p*IR%+~X^Nw2l(SuDm;_ZOGfw-1j`FRSAP*WhM z#tDI%0y!^H2-FnFNuffZroeH{wslP)1f~=SlodEB+quRGoFX7VfB*pk1PBlyK!5-N a0t5&UAV7cs0RjXF5FkK+009F3R^SWekS9?9 literal 0 HcmV?d00001 diff --git a/vibetorrent.db-wal b/vibetorrent.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..4e4984227eb2bb9fd621a68fca465847bc0fd24c GIT binary patch literal 78312 zcmeI*eQXvzI_PAt5>(ZY*r;ItbOm+Q))BS9pol*vKoQ~(-qcB~yh+;-2>4?fAl3ra%JZD> z+}KW9fmQ+T_Y}W9clYFepS!sAqu=A-&L>Inv2a4r<+8{gV-h#l56GFEY=*_|Qu@<&}m;Hi1 zn*FVNz0p&F8$43#^IheH{u5mP3E#zyHbNT&AOHafKmY;|fB*y_009WxQ3AC9?-qkW z{+QE9Kblh&eL1(H} zOPXosI!(}K>E-sLt0}GAZne_Mjp9MoN)&HPC9mjeS<$kD=9$Yga-uDvyQGy>U7?e# zr)btXOB8R}Vmh9X!!t3Kn?7Lm6(9+DTBe!hlX8- zWht#MHE(BSzn9gtK@;oOgKU~k?+paHT;eWqvyjaLS0wYniFpJ!CNTWh<`KO5y{kVs z)W1B&<`M9|^Bn!b0s#m>00Izz00bZa0SG_<0uX?}|As)EcYE&H;mPq@K{JMjhDU=# z!$CygzuIhGl+-pgoV^tMfm3y6gMLud#Uqyzd%Ef3QFR0uX=z1Rwwb z2tWV=5P$##AkcvV4u{7>!!qXp*y92tXV=c`{nW09@x6l`c)}491Rwwb2tWV=5P$## zAOHafK%iZ~$(rnOfyJMmzu;L5%lO{Gb||z!00Izz00bZa0SG_<0uX=z1UgW_#bUC@ z1qS1>WK`Aeq@A2=O6 zi+q80D6~KT0uX=z1Rwwb2tWV=5P$##I#58MF*U{ow%s3)p8n?9-g-TPRnE8Cfe|Al z2tWV=5P$##AOHafKmY;|fWZHwz`RwB!0{ecBj`$gkTUR$!p;}C%-#2!>Puf(OU_3$ zLnQ}_00Izz00ba#2MJWYUbi?a@zwjaLRMYTvMWld zqAw|WB>u?<%s$(Hd3#HDQ_t<| zZ(60EgcefqaEx{lm1C)Ty?Hyl=34a4HS32T7|m{2tUg^aHf+!QdqwOgyItZQX|p2s z?LjJ1dz+^^?sSWOKVM7MPmrqX?CQ|1M^_V^-D+_e#e-_0E-;q}M?;B4GAl3EfhxLM zRpCWtVs4VcXhYJEs7#v+h@jXc4gjmHAQPS-So=15h}Yl zZ+0!Db^UO$oK=?6`g?Ke16?k0m$+HT=7B4c`QWStc()h~^2eNJunPUNT2b=aW94-H zZJ_0~&_vL>wWV>0+S99qOoV6X`6X>9KdUz0XPQy!U|K;p(z%?PRcIgV+$U3^=v?Ch zAXD;mXd#j!lM4xYwo^)Dllty@B}3mjbTSc-N90hfv0r^{W=YK))GK*15s6Qz z@Ar?tJpS9&s?UG@_T&q&F@napK!51evFjsqA7|e$Ao$+leAnn576?E90uX=z1Rwwb z2tWV=5P$##I!M6j;CVrCI6NL2l$keR&m;Il`WLPj{<4;1`2uwE02T;900Izz00bZa z0SG_<0uX=z1Ug%QjSV#N1-LWMekJu24`Pl6M literal 0 HcmV?d00001