Skip to content

空の配列でアノテーションを更新できるように修正#279

Merged
rikunosuke merged 1 commit into
mainfrom
feature/delete-all-annotations-on-robotics-projects
Jun 22, 2026
Merged

空の配列でアノテーションを更新できるように修正#279
rikunosuke merged 1 commit into
mainfrom
feature/delete-all-annotations-on-robotics-projects

Conversation

@rikunosuke

Copy link
Copy Markdown
Contributor

annotations=[] の時にif分岐でリクエストに含まれない挙動を修正しました。
他のアノテーションでも起きうる状態であることは確認しましたが、影響範囲を考えて robotics のみの修正です。

@rikunosuke

Copy link
Copy Markdown
Contributor Author

API 側(api/src/annotations/services/api-task/api-task-service.ts)の挙動を調査したので参考まで。

結論

robotics の更新エンドポイント(PUT api/robotics/{id}updateRobotics)は、annotations: [] を受け取ると 既存アノテーションを全削除する 実装になっている。よって SDK 側で [] をリクエストに含めるこの修正で、意図通り「全削除」が効く。

トレース

// updateRobotics
if (params.annotations) {                       // ← [] は truthy なので通過
  await this.deleteInsertTaskAnnotations(manager, workspaceId, savedTask, params.annotations, project.type);
}
// deleteInsertTaskAnnotations → 空配列を map すると [] のまま delIns に渡る
await taskAnnotationRepository.delIns(workspaceId, task.projectId, task.id, taskAnnotations /* = [] */);

delIns は「対象タスクのアノテーションを無条件で全削除 → 渡された配列を insert」なので、空配列なら全削除のみ=全削除上書きになる。
バリデータ validateRoboticsAnnotations / validateAnnotations も空配列は素通り(forEach が no-op)。

他アノテーション種別の状況(参考)

update 系のうち位置情報を持つものは、いずれも if (params.annotations)(truthy 判定)なので [] で全削除できる
updateImage / updateSequentialImage / updateVideo / updateText / updateAudio / updatePcd / updateSequentialPcd / updateRobotics

&& length > 0 の length ガードが付いて [] がスキップされるのは create 系の一部のみcreateVideo / createText / createAudio など。新規作成なので空スキップでも実害なし)。

例外:

  • classification 系(image/multi-image/video/text/audio)は annotations 配列を持たず params.attributes 駆動なので対象外
  • updateDicom と 汎用 update は annotation を扱わない([] を送っても全削除されない)

つまり API 側は robotics 含め update 系で既に [] 全削除に対応済みのため、影響範囲を robotics に絞ったこの PR の方針で問題ない。他種別へ広げる場合も API 側の追加対応は基本不要(DICOM・汎用 update を除く)。

@yo-tak yo-tak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🚀 解説も分かりやすかったです!

@rikunosuke rikunosuke merged commit 6e97b6c into main Jun 22, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants