Claude commited on
Commit
bdf2fff
·
unverified ·
1 Parent(s): 61edd0f

fix: 교사 토론 종료 시 학생 화면 자동 반영 — 3초 폴링 fragment 추가

Browse files

fetch_debate_status 캐시가 만료돼도 학생 페이지가 rerun되지 않아
종료 상태가 반영 안 되는 문제 수정.
@st .fragment(run_every=3)으로 3초마다 상태 확인 후 변경 시 전체 rerun.

https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT

Files changed (1) hide show
  1. app.py +11 -0
app.py CHANGED
@@ -48,6 +48,7 @@ if 'admin_auth' not in st.session_state: st.session_state['admin_auth'] = False
48
  if 'teacher_id' not in st.session_state: st.session_state['teacher_id'] = ""
49
  if 'is_working' not in st.session_state: st.session_state['is_working'] = False
50
  if 'ai_hint_manual_mode' not in st.session_state: st.session_state['ai_hint_manual_mode'] = False
 
51
 
52
  if st.session_state['page'] != "home":
53
  col_home_btn, _ = st.columns([1, 7])
@@ -102,6 +103,15 @@ else:
102
  st.title(f"🎙️ 말자취(Talk-Trace) AI [{room_name}]")
103
  st.info(f"**현재 주제:** {current_topic} ({current_mode})")
104
 
 
 
 
 
 
 
 
 
 
105
  @st.fragment
106
  def _render_opinion_input(supabase, room_name, user_role, student_name, student_number, current_mode):
107
  st.subheader("🗣️ 내 의견 작성")
@@ -202,6 +212,7 @@ def _render_opinion_input(supabase, room_name, user_role, student_name, student_
202
  st.rerun()
203
 
204
  if user_role == "학생" and opinion_changes_available():
 
205
  debate_status = fetch_debate_status(supabase, room_name)
206
  if debate_status == "ended":
207
  render_post_opinion_section(supabase, room_name, student_name, act_type, current_topic)
 
48
  if 'teacher_id' not in st.session_state: st.session_state['teacher_id'] = ""
49
  if 'is_working' not in st.session_state: st.session_state['is_working'] = False
50
  if 'ai_hint_manual_mode' not in st.session_state: st.session_state['ai_hint_manual_mode'] = False
51
+ if '_last_debate_status' not in st.session_state: st.session_state['_last_debate_status'] = None
52
 
53
  if st.session_state['page'] != "home":
54
  col_home_btn, _ = st.columns([1, 7])
 
103
  st.title(f"🎙️ 말자취(Talk-Trace) AI [{room_name}]")
104
  st.info(f"**현재 주제:** {current_topic} ({current_mode})")
105
 
106
+ @st.fragment(run_every=3)
107
+ def _poll_debate_status(room_name):
108
+ """학생 화면에서 3초마다 토론 상태를 확인하고 변경 시 전체 rerun."""
109
+ current = fetch_debate_status(supabase, room_name)
110
+ if current != st.session_state.get("_last_debate_status"):
111
+ st.session_state["_last_debate_status"] = current
112
+ st.rerun()
113
+
114
+
115
  @st.fragment
116
  def _render_opinion_input(supabase, room_name, user_role, student_name, student_number, current_mode):
117
  st.subheader("🗣️ 내 의견 작성")
 
212
  st.rerun()
213
 
214
  if user_role == "학생" and opinion_changes_available():
215
+ _poll_debate_status(room_name)
216
  debate_status = fetch_debate_status(supabase, room_name)
217
  if debate_status == "ended":
218
  render_post_opinion_section(supabase, room_name, student_name, act_type, current_topic)