Skip to content

Commit dec9396

Browse files
jongjunnclaude
andcommitted
fix(review): persist last_review + correct resolver enrollment key
두 개의 프로덕션 버그 수정 (둘 다 infrastructure/repositories.py): 1. MySQLReviewCardRepository.save_card 가 last_review 를 저장하지 않아 review_card.last_review 가 항상 NULL 로 남았다. find_review_targets 의 멱등성 조건(rc.last_review IS NULL OR qs.submitted_at > rc.last_review)이 항상 참이 되어 야간 배치가 매 실행마다 전 카드를 재리뷰(당일 재리뷰로 처리 → FSRS stability 왜곡). 실측: 같은 날 재실행 시 skipped=0, updated=453. INSERT/UPDATE 에 last_review 추가. 2. MySQLEnrollmentQuizResolver.get_member_id 가 `enrollment WHERE id=%s` 로 조회했으나 enrollment 테이블 PK 는 enrollment_id 이고 id 컬럼은 없음 (V1__baseline.sql). "Unknown column 'id'" 로 유사문제 추천 경로 전체가 실패했다. WHERE enrollment_id=%s 로 수정. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent ad8784c commit dec9396

1 file changed

Lines changed: 5 additions & 5 deletions

File tree

infrastructure/repositories.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -317,14 +317,14 @@ def get_card(self, enrollment_id: str, lesson_id: str):
317317

318318
def save_card(self, enrollment_id: str, lesson_id: str, card: Card) -> None:
319319
sql = """
320-
INSERT INTO review_card (enrollment_id, lesson_id, stability, difficulty, due, state)
321-
VALUES (%s, %s, %s, %s, %s, %s)
320+
INSERT INTO review_card (enrollment_id, lesson_id, stability, difficulty, due, last_review, state)
321+
VALUES (%s, %s, %s, %s, %s, %s, %s)
322322
ON DUPLICATE KEY UPDATE
323323
stability = VALUES(stability), difficulty = VALUES(difficulty),
324-
due = VALUES(due), state = VALUES(state)
324+
due = VALUES(due), last_review = VALUES(last_review), state = VALUES(state)
325325
"""
326326
with get_connection() as conn, conn.cursor() as cur:
327-
cur.execute(sql, (enrollment_id, lesson_id, card.stability, card.difficulty, card.due, str(card.state)))
327+
cur.execute(sql, (enrollment_id, lesson_id, card.stability, card.difficulty, card.due, card.last_review, str(card.state)))
328328

329329

330330
class MySQLPendingReviewRepository:
@@ -430,7 +430,7 @@ class MySQLEnrollmentQuizResolver:
430430
lesson↔quiz는 N:N(lesson_quiz_map)이라 '이 학생이 그 레슨 퀴즈 중 가장 최근 제출한 quiz'를 택함."""
431431

432432
def get_member_id(self, enrollment_id: str):
433-
sql = "SELECT member_id FROM enrollment WHERE id = %s"
433+
sql = "SELECT member_id FROM enrollment WHERE enrollment_id = %s"
434434
with get_connection() as conn, conn.cursor() as cur:
435435
cur.execute(sql, (enrollment_id,))
436436
row = cur.fetchone()

0 commit comments

Comments
 (0)