PreprocessorService::updateCaptureMarkMeta | error - {
Fix Plan: PreprocessorService::updateCaptureMarkMeta | HttpError (장기 개선 — tesla re-run)
Changes#
tesla: app/controllers/concerns/metable_controller.rb#
- What: 새로운
update_meta_bulk액션 추가. JSON body의 top-level key들을 기존@model.meta에 merge한 뒤 한 번만 save. 전체 meta 교체가 아닌 선택적 key merge 방식. - Why: preprocessor가 mark, calibrated_videos, uncalibrated_video_ids를 개별 API 호출로 업데이트하는데, 이를 단일 요청으로 합치면 DB lock 획득 횟수가 3→1로 줄어 lock 경합 가능성이 크게 감소.
- Lines: update_meta_by_key 메서드 뒤에 새 메서드 추가 (약 68줄 이후)
tesla: config/routes.rb#
- What: metable concern에
put 'meta/bulk', action: :update_meta_bulk라우트 추가. 기존put 'meta'와get 'meta/*meta_key'사이에 배치. - Why: 새 bulk meta update endpoint를 노출하기 위함.
meta/bulk경로가meta/*meta_key의 wildcard 매칭보다 우선하도록 순서 배치 필요. - Lines: 316-321 (concern :metable 블록)
Acceptance Criteria#
-
PUT /captures/:id/meta/bulk엔드포인트가 MetableController에 추가됨 - 요청 body가 Hash인지 검증, 각 key를
@model.meta[key]에 merge 후 한 번만 save - 기존
update_meta_by_key,update_meta엔드포인트는 변경 없음 (하위 호환) -
meta/bulk라우트가meta/*meta_key보다 먼저 정의되어 올바르게 매칭됨 - rubocop 린트 통과 (또는 srb tc 통과)
Tests#
- 기존 테스트: tesla —
bundle exec srb tc app/controllers/concerns/metable_controller.rb - 신규 테스트: 없음 (기능적 변경이 아닌 최적화이므로)