ES /docs

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
  • 신규 테스트: 없음 (기능적 변경이 아닌 최적화이므로)