feat: /api/watchlist CRUD (#3) + deps.get_session 트랜잭션 버그 수정 #17
No reviewers
Labels
No labels
api
bug
chore
collector
decision-needed
docs
enhancement
feature
feedback-loop
frontend
infra
skill
test
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
xhh/financial-data-platform!17
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "issue-3-watchlist-crud"
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?
요약
models.Watchlist 기반 CRUD 엔드포인트 5개. 읽기는 read, 변경은 write 스코프.
부수 버그 수정
기존 api.deps.get_session 이 commit 없이 close 만 했기 때문에 mutation 이 전부 롤백되는 이슈 발견. 요청 종료 시 commit, 예외 시 rollback 으로 수정. 이후 reports/collect 엔드포인트에서도 동일 패턴 활용.
검증
로컬에서 9가지 시나리오 (create/duplicate-409/persist/update/delete/list-active/list-all/idempotent-delete/cleanup) 전부 기대대로 통과.
Closes #3
models.Watchlist 기반 표준 CRUD. 읽기는 read 스코프, 생성/수정/삭제는 write 스코프 필요. 삭제는 soft delete (active=False) — insider_trades 등 외래 참조가 있어 물리 삭제 피함. 엔드포인트: - GET /api/watchlist — 목록 (active_only, market 필터) - GET /api/watchlist/{ticker} — 단일 조회 (404 on missing) - POST /api/watchlist — 신규 생성 (409 on duplicate) - PATCH /api/watchlist/{ticker} — 부분 수정 (None 필드 제외) - DELETE /api/watchlist/{ticker} — soft delete, idempotent 스키마: - WatchlistItem: 응답 (from_attributes=True 로 ORM 직렬화) - WatchlistCreate: POST 바디 (ticker 필수) - WatchlistUpdate: PATCH 바디 (전 필드 선택) Literal 타입으로 market(us/kr), schedule(daily/weekly/biweekly/monthly) 값 검증. 검증: 9가지 시나리오(create/duplicate/persist/update/delete/list-active/list-all/idempotent-delete/cleanup) 전부 기대대로 통과. Closes #3 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>