Spaces:
Runtime error
Runtime error
Commit History
-
fix: 코드 리뷰 지적사항 반영 (db.py 스키마 체크 안정성 개선)
ClaudeUnverified signature- _is_connection_error: httpx/ssl 예외 타입 체크 우선 적용, 과도한 키워드("connection","reset") 제거 - check_schema_columns: 루프 즉시 raise → 루프 완주 후 raise (부분 성공 결과 유실 방지) - _schema(): 예외 삼킬 때 warning 로그 추가 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT04722be -
fix: Supabase 재연결 후 데이터 미로딩 문제 수정
ClaudeUnverified signature- execute_query에서 연결 오류 감지 시 init_db/check_schema_columns 캐시 초기화 - check_schema_columns TTL을 3600s→300s로 단축 - 연결 오류 시 캐시 저장 방지 (RuntimeError 전파) - _schema() 래퍼로 availability 헬퍼들이 연결 오류에도 False 반환 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTdf3d537
-
feat: AI 피드백 카드 (Work Item 5)
ClaudeUnverified signature- opinion_changes.ai_feedback 컬럼 스키마 체크 추가 - save_opinion_feedback() DB 함수 추가 - build_feedback_prompt() AI 프롬프트 추가 (잘한 점 / 발전할 점) - 생각 변화 제출 시 배움 분석 + 피드백 카드 동시 생성 - 학생 화면: 토론 후 피드백 카드 2단 컬럼 표시 (✅ 잘한 점 / 🌱 발전할 점) - 교사 대시보드: 학생별 배움 분석에 피드백 카드 함께 표시 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTb04c6ca -
feat: 발언 깊이 분석 (Work Item 4)
ClaudeUnverified signature- debate 테이블 depth_level 컬럼 스키마 체크 추가 (depth_level_available) - fetch_opinions_for_depth, bulk_update_depth_levels DB 함수 추가 - AI 배치 분류 프롬프트/파서 (build_depth_analysis_prompt, parse_depth_levels) 추가 - components/depth_analysis.py 신규 생성 - 분석 실행/재분석 버튼 (교사가 원할 때만 AI 호출) - 발언 깊이 분포 막대 차트 - 시간 흐름에 따른 발언 깊이 산점도 - 학생별 평균 발언 깊이 테이블 (ProgressColumn) - teacher_dashboard.py에 render_depth_analysis_section 통합 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT3489362
-
feat: 공감(👍) 버튼 기능 추가
ClaudeUnverified signature- likes 테이블 스키마 체크 및 likes_available() 추가 - fetch_room_likes(), toggle_like() DB 함수 추가 - 메시지 오른쪽에 공감 버튼 표시 (이미 공감 시 primary 스타일) - 공감 수 상위 3개에 🥇🥈🥉 뱃지 표시 - 동일 IP 의견에는 공감 버튼 비활성화(셀프 공감 차단) SQL 필요: CREATE TABLE likes (id bigserial PRIMARY KEY, opinion_id bigint NOT NULL, room_name text NOT NULL, student_name text NOT NULL, created_at timestamptz DEFAULT now(), UNIQUE (opinion_id, student_name)); https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT5aad439
-
feat: 교사가 방 입장 후 토론 주제를 수정할 수 있는 기능 추가
ClaudeUnverified signaturehttps://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTa79721f
-
fix: IP 저장을 별도 업데이트로 분리 — 스키마 캐시 우회
ClaudeUnverified signaturecheck_schema_columns 1시간 캐시로 인해 컬럼 추가 후에도 IP가 저장되지 않던 문제 수정. IP를 메인 upsert와 분리해 별도로 저장하고 실패해도 무시. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTf78e40c -
fix: 학생별 배움 분석 IP 표시 — opinion_changes에 ip_address 저장
ClaudeUnverified signaturedebate 메시지 없이 opinions만 제출한 학생도 IP가 표시되도록 pre-opinion 제출 시 IP를 opinion_changes에 함께 저장. 교사 대시보드는 opinion_changes 행에서 IP를 우선 읽고 없을 경우 debate 메시지에서 fallback. DB 마이그레이션 필요: ALTER TABLE opinion_changes ADD COLUMN IF NOT EXISTS ip_address text; https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKTffefbd1 -
feat: 교사 배움 분석 학생 기록 삭제 + IP A.X.X.D 포맷 표시
ClaudeUnverified signature- 교사 대시보드 학생별 배움 분석에 삭제 버튼 + 2단계 확인 추가 - 학생 IP를 A.X.X.D 형태로 표시 (기존 A.0.0.D도 변환) - IP 저장 포맷도 A.X.X.D로 통일 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT324c055 -
feat: 작업 2 - 최종 입장 표현 구현
ClaudeUnverified signature[토론] 토론 전 초기 입장(찬성/반대/중립) 선택 UI 추가 [토론] 토론 후 최종 입장 투표 UI 추가 [토론] 교사 대시보드 전후 입장 변화율 도넛 차트 시각화 [토의] 토의 종료 후 '가장 중요한 결론은?' 한 줄 입력 UI 추가 [토의] 교사 대시보드 결론 워드클라우드 시각화 DB: opinion_changes에 initial_stance, final_stance, discussion_conclusion 컬럼 추가 필요 (SQL 별도 안내) https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT1f31eaa
-
feat: AI 분석 결과 이미지 저장 + 교사 대시보드 학생별 분석 뷰어
ClaudeUnverified signature- 학생/교사 화면에 AI 배움 분석 PNG 이미지 다운로드 버튼 추가 - Dockerfile.base에 NanumGothic 한글 폰트 설치 추가 - 교사 대시보드에 학생별 분석 결과 조회 기능 추가 (드롭다운 선택) - fetch_all_opinion_changes() DB 함수 추가 https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT352ddf6 -
feat: 토론 전후 생각 변화 기록 기능 추가 (Sprint 3 작업 1)
ClaudeUnverified signature- 학생은 토론 전 생각을 먼저 제출해야 의견 입력창 활성화 - 교사가 '토론 종료' 클릭 시 학생 화면이 '생각 변화 입력' 폼으로 전환 - 학생이 토론 후 생각 제출 시 AI가 전후 비교 분석 자동 생성 - 새 DB 테이블 opinion_changes, session_control 필요 (SQL 안내 별도) https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT5c3354b
-
feat: 교사 세특 작성 영역 전체 제거
ClaudeUnverified signature연구대회 학생 배움 중심 스프린트 방향에 따라 세특 기능 제외. AI 세특 초안 생성 UI, 세특 보관함, 관련 DB 쿼리, 프롬프트 빌더, session_state, CSS를 모두 삭제. https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT10d9001
-
fix: Rate Limiting을 DB 기반 서버사이드 체크로 교체
ClaudeUnverified signaturesession_state 방식은 페이지 새로고침·탭 전환 시 초기화되어 우회 가능. DB에서 동일 학생의 15초 이내 최근 제출 여부를 직접 확인하는 방식으로 변경. (is_recent_submission 함수 신설 — debate 테이블에 gte 쿼리) https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv7018c37f -
fix: 코드 리뷰 지적사항 8건 수정
ClaudeUnverified signature[🔴 심각] - env.py 신설: _get_secret → get_secret 공개 API로 전환 db.py, config.py, teacher_auth.py, teacher_dashboard.py 임포트 일괄 정리 - app.py: 의견 제출 Rate Limiting 추가 (10초 제한) [🟡 경고] - validators.py: validate_opinion_content에 allowed_pattern=None 적용 (특수문자·이모지 허용, 길이만 체크) - validators.py: _validate_text_field 길이 체크를 truncate 이전에 수행 (TOO_LONG 오류가 절대 발생하지 않던 버그 수정) - utils.py: get_kst_now()를 timezone-aware KST datetime 반환으로 변경 - app.py: DB 저장 전 IP를 SHA-256 해시(16자)로 처리 [🔵 개선] - tests/ 신설: validators, utils 단위 테스트 24개 (pytest) - CI에 test job 추가 - teacher_dashboard.py를 hint/summary/records 3개 컴포넌트로 분리 - wordcloud.py: max_words 75→40으로 축소 (O(n²) 성능 개선) - utils.py: compact_ai_report_output 이중 치환 버그 → 정규식으로 수정 https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv744ebedd
-
refactor: 불필요한 파일 통폐합 및 관심사 분리
ClaudeUnverified signature- components/__init__.py, views/__init__.py (빈 파일) 삭제 - services/prompts.py → services/ai.py 병합 (항상 함께 사용되는 프롬프트 빌더) - auth.py 신설: 비밀번호 해시/검증 함수를 db.py에서 분리 - components/teacher_auth.py 신설: 교사 로그인·회원가입·로그아웃 UI를 sidebar.py에서 추출 (242줄 → 110줄) - views/admin.py → components/admin_panel.py 이동 (컴포넌트 성격에 맞게 재배치) - 관련 임포트 경로 일괄 업데이트 https://claude.ai/code/session_01BRbPoMBBfvgN58bGkNhmv78673167
-
Fix: ThreadPoolExecutor 제거로 cache_data 캐시 미작동 해결
ClaudeUnverified signatureThreadPoolExecutor가 생성한 백그라운드 스레드는 Streamlit 스크립트 실행 컨텍스트를 상속받지 못해 @st.cache_data가 결과를 저장하지 못함. 매 새로고침마다 DB 쿼리 5회 재실행(~10초)의 근본 원인. 원래의 순차 for 루프로 복원하여 캐시가 정상 작동하도록 수정. https://claude.ai/code/session_01Q3iYL9HzBCznNPUTHLZLnqfba5150 -
Fix: 캐시 중첩 호출로 인한 10초 지연 제거, Running 표시 숨김
ClaudeUnverified signaturefetch_room_names/fetch_room_names_by_owner/fetch_topic_data의 @st.cache_data 추가가 check_schema_columns(@st.cache_data) 중첩 호출 시 Streamlit 캐시 미스를 유발해 매 새로고침마다 10초 지연 발생. 세 함수의 데코레이터와 _ 파라미터 접두사 제거로 원복. stStatusWidget CSS 숨김으로 Running 표시 제거. https://claude.ai/code/session_01Q3iYL9HzBCznNPUTHLZLnq180a1f1 -
Fix: 대기실 이동 시 Running 스피너 지연 개선
ClaudeUnverified signaturecache_resource → cache_data(ttl=3600) 복원 (cache_data 내부에서 cache_resource 호출 시 Streamlit 성능 저하 문제 해결) app.py 초기화 시점에 check_schema_columns()를 미리 호출해 이후 사이드바/대기실 렌더링 시 DB 쿼리 없이 캐시 즉시 반환 https://claude.ai/code/session_01Q3iYL9HzBCznNPUTHLZLnq01c34b8 -
Fix: 사이드바 초기 로딩 시 실행 중 표시 제거
ClaudeUnverified signaturecheck_schema_columns를 cache_data(세션별)에서 cache_resource(서버 전체)로 변경하여 첫 실행 시 DB 컬럼 확인 쿼리가 세션마다 반복 실행되지 않도록 수정 https://claude.ai/code/session_01Q3iYL9HzBCznNPUTHLZLnqbdeba27 -
Feat: 관리자 페이지에 교사 계정 신청 거절 기능 추가
ClaudeUnverified signature거절 시 해당 계정 레코드를 삭제하며, 교사는 동일 ID로 재신청 가능. 승인/거절 버튼을 한 행에 나란히 배치. https://claude.ai/code/session_01VubVHht1kvabfdfFR1weKsd401caa -
Perf: 초기 로딩 속도 개선 (sleep 제거, 캐시 추가, 병렬 쿼리)
ClaudeUnverified signature- ensure_db_login: time.sleep(0.5) 제거로 매 세션 0.5s 단축 - check_schema_columns: 5개 DB 쿼리를 ThreadPoolExecutor로 병렬 실행 - fetch_room_names / fetch_room_names_by_owner: @st.cache_data(ttl=30) 추가 - fetch_topic_data: @st.cache_data(ttl=10) 추가로 매 렌더링 DB 쿼리 제거 - chat_board: 실시간 보드 fetch를 2000 → 300건으로 축소 (6.7x 네트워크 절감) - sidebar: 방 개설 시 관련 캐시 명시적 무효화 https://claude.ai/code/session_01VubVHht1kvabfdfFR1weKsbd2e763
-
Fix: 미사용 import 제거, fetch_live_messages 이중 DB 호출 캐싱
ClaudeUnverified signature- app.py: normalize_user_text 미사용 import 제거 - db.py: fetch_live_messages에 @st.cache_data(ttl=5) 추가 교사 대시보드+채팅보드 이중 호출 → 5초 캐시로 1회만 쿼리 https://claude.ai/code/session_018WXW8M8SMsWcHtj1RynUi409bd939
-
Security: 로그인 시 평문 비밀번호 자동 bcrypt 업그레이드
ClaudeUnverified signature- _is_hashed(): bcrypt 해시 여부 감지 - upgrade_teacher_password(): 해시로 DB 업데이트 - sidebar: 로그인 성공 시 평문이면 즉시 자동 해시 업그레이드 https://claude.ai/code/session_018WXW8M8SMsWcHtj1RynUi46b47768 -
Security: 교사 비밀번호 bcrypt 해시 저장 및 의존성 버전 핀
ClaudeUnverified signature- db.py: _hash_password(), _verify_password() 추가 - 신규 계정 신청 시 bcrypt 해시로 저장 - 로그인 시 bcrypt 검증, 기존 평문 계정도 호환 - components/sidebar.py: 직접 문자열 비교 → _verify_password() 사용 - requirements.txt: 버전 범위 핀 추가, bcrypt>=4.0.0 추가 https://claude.ai/code/session_018WXW8M8SMsWcHtj1RynUi420fc3c3
-
Update db.py
Unverified signature38e2cea -
Update db.py
Unverified signatureb2bcb34 -
Update db.py
Unverified signatured333414
-
Update db.py
Unverified signature70202b7 -
Update db.py
Unverified signature98eb194
-
Update db.py
Unverified signaturea09f66e -
Update db.py
Unverified signaturef8c58e1 -
Update db.py
Unverified signature9595df7 -
Update db.py
Unverified signature470668b -
Update db.py
Unverified signature0b84c99 -
Update db.py
Unverified signatureb9a0330 -
Update db.py
Unverified signatureef84615 -
Update db.py
Unverified signature497a52a -
Update db.py
Unverified signature5c1ec56 -
Update db.py
Unverified signature19e6add -
Update db.py
Unverified signaturee9140ef -
Update db.py
Unverified signature14f8370 -
Update db.py
Unverified signature90c9536
-
Update db.py
Unverified signature576a967 -
Update db.py
Unverified signature1043ac6 -
Update db.py
Unverified signature6c1a789 -
Update db.py
Unverified signatureee4ea0d -
Update db.py
Unverified signature48c103d -
Update db.py
Unverified signature0db7069 -
Update db.py
Unverified signaturee28b89a