From d7460ec53f82d9e0e75335f28b743edde0b5e1ed Mon Sep 17 00:00:00 2001 From: JSR Date: Fri, 20 Mar 2026 17:16:19 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=A2=9E=E5=8A=A0=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E7=A7=AF=E5=88=86=E6=93=8D=E4=BD=9C=E4=B8=8E=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E8=AF=8A=E6=96=AD=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-tauri/src/commands/event.rs | 26 +++++++++++++++++++ src/components/Home.tsx | 46 +++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/src-tauri/src/commands/event.rs b/src-tauri/src/commands/event.rs index 2a4c0f5..9ef9f7f 100644 --- a/src-tauri/src/commands/event.rs +++ b/src-tauri/src/commands/event.rs @@ -5,6 +5,7 @@ use sea_orm::{ TransactionTrait, }; use serde::{Deserialize, Serialize}; +use serde_json::json; use std::sync::Arc; use tauri::State; use uuid::Uuid; @@ -173,7 +174,32 @@ pub async fn event_create( active.update(&txn).await.map_err(|e| e.to_string())?; txn.commit().await.map_err(|e| e.to_string())?; + { + let state_guard = state.read(); + let logger = state_guard.logger.read(); + logger.info_with_meta( + "event_create:committed", + json!({ + "student_name": student_name, + "delta": data.delta, + "val_prev": val_prev, + "val_curr": val_curr, + }), + ); + } realtime_dual_write_sync(state.inner()).await?; + { + let state_guard = state.read(); + let logger = state_guard.logger.read(); + logger.info_with_meta( + "event_create:sync_done", + json!({ + "student_name": student_name, + "delta": data.delta, + "val_curr": val_curr, + }), + ); + } Ok(IpcResponse::success(inserted.id)) } Ok(None) => Ok(IpcResponse::error("Student not found")), diff --git a/src/components/Home.tsx b/src/components/Home.tsx index d8964fe..009eb81 100644 --- a/src/components/Home.tsx +++ b/src/components/Home.tsx @@ -105,6 +105,18 @@ export const Home: React.FC = ({ canEdit, isPortraitMode = false }) = window.dispatchEvent(new CustomEvent("ss:data-updated", { detail: { category } })) } + const logHome = (message: string, meta?: Record) => { + try { + if (meta) { + console.info(`[Home] ${message}`, meta) + } else { + console.info(`[Home] ${message}`) + } + } catch { + void 0 + } + } + const getSurname = (name: string) => { if (!name) return "" return name.charAt(0) @@ -121,6 +133,7 @@ export const Home: React.FC = ({ canEdit, isPortraitMode = false }) = const fetchData = useCallback(async (silent = false) => { if (!(window as any).api) return const requestId = ++fetchRequestIdRef.current + logHome("fetchData:start", { requestId, silent }) if (!silent) setLoading(true) const [stuRes, reaRes] = await Promise.all([ (window as any).api.queryStudents({}), @@ -128,6 +141,15 @@ export const Home: React.FC = ({ canEdit, isPortraitMode = false }) = ]) if (requestId !== fetchRequestIdRef.current) return + logHome("fetchData:response", { + requestId, + silent, + studentsSuccess: Boolean(stuRes?.success), + studentsCount: Array.isArray(stuRes?.data) ? stuRes.data.length : 0, + reasonsSuccess: Boolean(reaRes?.success), + reasonsCount: Array.isArray(reaRes?.data) ? reaRes.data.length : 0, + }) + if (stuRes.success) { const enrichedStudents = (stuRes.data as student[]).map((s) => ({ ...s, @@ -148,6 +170,12 @@ export const Home: React.FC = ({ canEdit, isPortraitMode = false }) = if (res.success) { const latest = Array.isArray(res.data) && res.data.length > 0 ? (res.data[0] as scoreEvent) : null setLatestEvent(latest) + logHome("fetchLatestEvent:response", { + hasLatest: Boolean(latest), + latestStudent: latest?.student_name, + latestDelta: latest?.delta, + latestUuid: latest?.uuid, + }) } }, []) @@ -156,6 +184,7 @@ export const Home: React.FC = ({ canEdit, isPortraitMode = false }) = fetchLatestEvent() const onDataUpdated = (e: any) => { const category = e?.detail?.category + logHome("event:ss:data-updated", { detail: e?.detail }) if ( category === "events" || category === "students" || @@ -448,12 +477,25 @@ export const Home: React.FC = ({ canEdit, isPortraitMode = false }) = } setSubmitLoading(true) + logHome("performSubmit:start", { + student: student.name, + delta, + content, + localScoreBefore: student.score, + }) const res = await (window as any).api.createEvent({ student_name: student.name, reason_content: content, delta: delta, }) + logHome("performSubmit:createEvent:response", { + student: student.name, + delta, + success: Boolean(res?.success), + message: (res as any)?.message, + }) + if (res.success) { messageApi.success( delta > 0 @@ -464,6 +506,10 @@ export const Home: React.FC = ({ canEdit, isPortraitMode = false }) = fetchData(true) fetchLatestEvent() emitDataUpdated("events") + logHome("performSubmit:afterSuccessRefreshDispatched", { + student: student.name, + delta, + }) } else { messageApi.error(res.message || t("home.submitFailed")) }