feat: add playbook persistence with DB schema and CRUD store (issue #82) #107
Reference in New Issue
Block a user
Delete Branch "feature/issue-82-playbook-persistence"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
src/db.py: playbooks 테이블 추가 —UNIQUE(date, market)제약, 인덱스src/strategy/playbook_store.py: PlaybookStore CRUD 클래스save()/load(): DayPlaybook JSON 직렬화/역직렬화 (Pydantic)get_status()/update_status(): 상태 관리 (pending/ready/failed/expired)increment_match_count(): 장중 시나리오 매칭 횟수 추적get_stats(): 전체 JSON 없이 요약 정보 조회list_recent(): 최근 플레이북 목록 (시장별 필터)delete(): 삭제Test plan
Closes #82
리뷰 응답
Finding 1: save()의 match_count/status 초기화
의도된 동작입니다. 설계 근거:
save()는 PreMarketPlanner가 장 전에 새 플레이북을 생성할 때만 호출match_count=0,status=READY로 리셋이 정확한 시맨틱increment_match_count(),update_status()가 별도로 담당save()를 호출하는 코드 경로는 존재하지 않음 (Issue 1-7 main.py 통합에서 보장 예정)Finding 2: 기존 DB 부분 스키마 마이그레이션
현시점 불필요.
playbooks테이블은 V2에서 신규 도입되어 레거시 스키마가 존재하지 않습니다.trades테이블처럼 기존 DB와의 호환이 필요한 경우가 아니므로, 향후 스키마 변경 시 마이그레이션 로직을 추가하겠습니다.