LearningnRunning commited on
Commit
09ab9b3
Β·
1 Parent(s): 485f265

feat: Update student ID handling in app.py to improve ID generation and session initialization. Modify Supabase schema to accommodate larger student ID fields across relevant tables.

Browse files
Files changed (2) hide show
  1. app.py +17 -26
  2. supabase_init.sql +5 -5
app.py CHANGED
@@ -648,8 +648,7 @@ with gr.Blocks(title="κ°„ν˜Έ μΈμˆ˜μΈκ³„ ꡐ윑 ν”Œλž«νΌ", theme=gr.themes.Sof
648
  info="μžλ™μœΌλ‘œ μƒμ„±λœ 고유 IDμž…λ‹ˆλ‹€. 'μƒˆ ID 생성' λ²„νŠΌμœΌλ‘œ μƒˆ IDλ₯Ό 받을 수 μžˆμŠ΅λ‹ˆλ‹€."
649
  )
650
  with gr.Row():
651
- generate_id_btn = gr.Button("πŸ”„ μƒˆ ID 생성", variant="secondary", size="sm")
652
- start_btn = gr.Button("μ‹œμž‘ν•˜κΈ°", variant="primary")
653
 
654
  # νƒ­ ꡬ성
655
  with gr.Tabs() as tabs:
@@ -759,30 +758,19 @@ with gr.Blocks(title="κ°„ν˜Έ μΈμˆ˜μΈκ³„ ꡐ윑 ν”Œλž«νΌ", theme=gr.themes.Sof
759
  new_id = generate_student_id()
760
  return new_id
761
 
762
- # μƒˆ ID 생성 λ²„νŠΌ
763
- generate_id_btn.click(
764
- fn=update_student_id,
765
- outputs=[student_id_input]
766
- )
767
-
768
- def initialize_session(student_id):
769
- """μ„Έμ…˜ μ΄ˆκΈ°ν™”"""
770
- is_admin = (student_id == "admin")
771
  role = "admin" if is_admin else "student"
772
-
773
- # κ΄€λ¦¬μžμΈ 경우 κ΄€λ¦¬μž νƒ­ ν‘œμ‹œ
774
  tab_visibility = gr.update(visible=is_admin)
775
 
776
- # 학생 IDκ°€ λΉ„μ–΄μžˆμœΌλ©΄ 생성
777
- if not student_id or student_id.strip() == "":
778
- student_id = generate_student_id()
779
-
780
- return student_id, role, tab_visibility, gr.update(value=f"ν™˜μ˜ν•©λ‹ˆλ‹€, {student_id}λ‹˜!")
781
 
782
- start_btn.click(
783
- fn=initialize_session,
784
- inputs=[student_id_input],
785
- outputs=[student_id_state, user_role_state, tab_admin, gr.Markdown()]
786
  )
787
 
788
  def select_scenario_and_create_session(scenario_id, student_id):
@@ -876,6 +864,9 @@ with gr.Blocks(title="κ°„ν˜Έ μΈμˆ˜μΈκ³„ ꡐ윑 ν”Œλž«νΌ", theme=gr.themes.Sof
876
  """μ•± 초기 λ‘œλ“œ μ‹œ μ‹€ν–‰"""
877
  default_scenario = "S001_D0_ER_WARD"
878
 
 
 
 
879
  # Supabase μ„œλΉ„μŠ€κ°€ 있으면 μ‹œλ‚˜λ¦¬μ˜€ 데이터 λ‘œλ“œ
880
  if supabase_service:
881
  scenario, patient, emr_html = load_scenario_data(default_scenario)
@@ -883,16 +874,16 @@ with gr.Blocks(title="κ°„ν˜Έ μΈμˆ˜μΈκ³„ ꡐ윑 ν”Œλž«νΌ", theme=gr.themes.Sof
883
  if scenario:
884
  # κΈ°λ³Έ μ‹œλ‚˜λ¦¬μ˜€ 정보 ν‘œμ‹œ
885
  scenario_info = f"**ν˜„μž¬ μ‹œλ‚˜λ¦¬μ˜€**: {scenario.title}"
886
- return emr_html, default_scenario, scenario_info
887
  else:
888
- return emr_html, default_scenario, "**ν˜„μž¬ μ‹œλ‚˜λ¦¬μ˜€**: μ„ νƒλ˜μ§€ μ•ŠμŒ"
889
  else:
890
- return "", default_scenario, "**ν˜„μž¬ μ‹œλ‚˜λ¦¬μ˜€**: μ„ νƒλ˜μ§€ μ•ŠμŒ"
891
 
892
  # 초기 λ‘œλ“œ
893
  app.load(
894
  fn=initialize_app,
895
- outputs=[emr_display, scenario_id_state, current_scenario_display]
896
  )
897
 
898
 
 
648
  info="μžλ™μœΌλ‘œ μƒμ„±λœ 고유 IDμž…λ‹ˆλ‹€. 'μƒˆ ID 생성' λ²„νŠΌμœΌλ‘œ μƒˆ IDλ₯Ό 받을 수 μžˆμŠ΅λ‹ˆλ‹€."
649
  )
650
  with gr.Row():
651
+ generate_id_btn = gr.Button("πŸ”„ μƒˆ ID 생성", variant="secondary")
 
652
 
653
  # νƒ­ ꡬ성
654
  with gr.Tabs() as tabs:
 
758
  new_id = generate_student_id()
759
  return new_id
760
 
761
+ # μƒˆ ID 생성 λ²„νŠΌ (student_id_state도 ν•¨κ»˜ μ—…λ°μ΄νŠΈ)
762
+ def update_student_id_with_state():
763
+ """μƒˆ 학생 ID 생성 및 μƒνƒœ μ—…λ°μ΄νŠΈ"""
764
+ new_id = generate_student_id()
765
+ is_admin = (new_id == "admin")
 
 
 
 
766
  role = "admin" if is_admin else "student"
 
 
767
  tab_visibility = gr.update(visible=is_admin)
768
 
769
+ return new_id, new_id, role, tab_visibility
 
 
 
 
770
 
771
+ generate_id_btn.click(
772
+ fn=update_student_id_with_state,
773
+ outputs=[student_id_input, student_id_state, user_role_state, tab_admin]
 
774
  )
775
 
776
  def select_scenario_and_create_session(scenario_id, student_id):
 
864
  """μ•± 초기 λ‘œλ“œ μ‹œ μ‹€ν–‰"""
865
  default_scenario = "S001_D0_ER_WARD"
866
 
867
+ # student_id_stateλ₯Ό 초기 ID둜 μ„€μ •
868
+ initial_student_id = student_id_input.value
869
+
870
  # Supabase μ„œλΉ„μŠ€κ°€ 있으면 μ‹œλ‚˜λ¦¬μ˜€ 데이터 λ‘œλ“œ
871
  if supabase_service:
872
  scenario, patient, emr_html = load_scenario_data(default_scenario)
 
874
  if scenario:
875
  # κΈ°λ³Έ μ‹œλ‚˜λ¦¬μ˜€ 정보 ν‘œμ‹œ
876
  scenario_info = f"**ν˜„μž¬ μ‹œλ‚˜λ¦¬μ˜€**: {scenario.title}"
877
+ return emr_html, default_scenario, scenario_info, initial_student_id, "student"
878
  else:
879
+ return emr_html, default_scenario, "**ν˜„μž¬ μ‹œλ‚˜λ¦¬μ˜€**: μ„ νƒλ˜μ§€ μ•ŠμŒ", initial_student_id, "student"
880
  else:
881
+ return "", default_scenario, "**ν˜„μž¬ μ‹œλ‚˜λ¦¬μ˜€**: μ„ νƒλ˜μ§€ μ•ŠμŒ", initial_student_id, "student"
882
 
883
  # 초기 λ‘œλ“œ
884
  app.load(
885
  fn=initialize_app,
886
+ outputs=[emr_display, scenario_id_state, current_scenario_display, student_id_state, user_role_state]
887
  )
888
 
889
 
supabase_init.sql CHANGED
@@ -68,7 +68,7 @@ COMMENT ON COLUMN scenarios.handoff_situation IS 'μΈμˆ˜μΈκ³„ 상황 (예: 응
68
  CREATE TABLE IF NOT EXISTS handoff_records (
69
  id SERIAL PRIMARY KEY,
70
  session_id VARCHAR(100),
71
- student_id VARCHAR(50) NOT NULL,
72
  scenario_id VARCHAR(50) NOT NULL REFERENCES scenarios(id) ON DELETE CASCADE,
73
  submitted_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
74
  situation TEXT,
@@ -96,7 +96,7 @@ COMMENT ON COLUMN handoff_records.safety_concerns IS 'ν™˜μž μ•ˆμ „ κ΄€λ ¨ μ£Ό
96
  CREATE TABLE IF NOT EXISTS chat_history (
97
  id SERIAL PRIMARY KEY,
98
  session_id VARCHAR(100) NOT NULL,
99
- student_id VARCHAR(50) NOT NULL,
100
  scenario_id VARCHAR(50) NOT NULL,
101
  role VARCHAR(20) NOT NULL CHECK (role IN ('user', 'assistant')),
102
  message TEXT NOT NULL,
@@ -109,7 +109,7 @@ COMMENT ON TABLE chat_history IS '학생과 AI κ°„μ˜ μ±„νŒ… 기둝';
109
  CREATE TABLE IF NOT EXISTS sbar_drafts (
110
  id SERIAL PRIMARY KEY,
111
  session_id VARCHAR(100) NOT NULL UNIQUE,
112
- student_id VARCHAR(50) NOT NULL,
113
  scenario_id VARCHAR(50) NOT NULL,
114
  situation TEXT DEFAULT '',
115
  background TEXT DEFAULT '',
@@ -123,8 +123,8 @@ COMMENT ON TABLE sbar_drafts IS 'μž‘μ„± 쀑인 SBAR μž„μ‹œ μ €μž₯';
123
  -- 1.6 sessions ν…Œμ΄λΈ” (μ„Έμ…˜ 관리)
124
  CREATE TABLE IF NOT EXISTS sessions (
125
  id SERIAL PRIMARY KEY,
126
- session_id VARCHAR(50) UNIQUE NOT NULL,
127
- student_id VARCHAR(50) NOT NULL,
128
  scenario_id VARCHAR(50) NOT NULL,
129
  status VARCHAR(20) DEFAULT 'active',
130
  started_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
 
68
  CREATE TABLE IF NOT EXISTS handoff_records (
69
  id SERIAL PRIMARY KEY,
70
  session_id VARCHAR(100),
71
+ student_id VARCHAR(100) NOT NULL,
72
  scenario_id VARCHAR(50) NOT NULL REFERENCES scenarios(id) ON DELETE CASCADE,
73
  submitted_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
74
  situation TEXT,
 
96
  CREATE TABLE IF NOT EXISTS chat_history (
97
  id SERIAL PRIMARY KEY,
98
  session_id VARCHAR(100) NOT NULL,
99
+ student_id VARCHAR(100) NOT NULL,
100
  scenario_id VARCHAR(50) NOT NULL,
101
  role VARCHAR(20) NOT NULL CHECK (role IN ('user', 'assistant')),
102
  message TEXT NOT NULL,
 
109
  CREATE TABLE IF NOT EXISTS sbar_drafts (
110
  id SERIAL PRIMARY KEY,
111
  session_id VARCHAR(100) NOT NULL UNIQUE,
112
+ student_id VARCHAR(100) NOT NULL,
113
  scenario_id VARCHAR(50) NOT NULL,
114
  situation TEXT DEFAULT '',
115
  background TEXT DEFAULT '',
 
123
  -- 1.6 sessions ν…Œμ΄λΈ” (μ„Έμ…˜ 관리)
124
  CREATE TABLE IF NOT EXISTS sessions (
125
  id SERIAL PRIMARY KEY,
126
+ session_id VARCHAR(100) UNIQUE NOT NULL,
127
+ student_id VARCHAR(100) NOT NULL,
128
  scenario_id VARCHAR(50) NOT NULL,
129
  status VARCHAR(20) DEFAULT 'active',
130
  started_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),