Skip to content

feat(web): CFItemType の逆参照「この種別の項目」を追加#13

Merged
kentalow merged 2 commits into
mainfrom
feat/itemtype-reverse-items
Jun 20, 2026
Merged

feat(web): CFItemType の逆参照「この種別の項目」を追加#13
kentalow merged 2 commits into
mainfrom
feat/itemtype-reverse-items

Conversation

@kentalow

Copy link
Copy Markdown
Member

概要

CFSubject の逆参照(「この分野を設定している項目」)と同じ枠組みを CFItemType に展開します。種別(CFItemType)の詳細ページ/ツリーペインに「この種別の項目」一覧を表示します。

きっかけ:ユーザーが種別ページを開いても一覧が出ないことに気づいた(逆参照が CFSubject 専用だったため)。種別は FK(cf_item.cf_item_type_id)なので JSONB/GIN 不要で軽い。

実装

  • repo: list_items_by_item_type / count_items_by_item_type(FK 一致・document_id スコープ)。共通の select/count を _list_items_where / _count_items_where に抽出して subject と共用。
  • web.py: _detail_extrasCFItemType 分岐(item_type_items)、両ペイン経路(SSR deep-link / HTMX フラグメント)で doc スコープ計算、GET /{tenant}/item-type/{id}/items フラグメントルート、_items_fragment_ctx ヘルパー。
  • template: subject_items.htmlitems_endpoint 引数化して subject / item-type 共用、resource_detail.html に CFItemType セクション追加。
  • i18n: item_type_items_label(この種別の項目 / Items of this type)。

スコープ(案B・CFSubject と同一)

  • 単独 /uri/{item-type} ページ … テナント横断
  • ツリーペイン … 現ドキュメント内のみ

テスト(8件 / 全704 pass)

FK 絞り込み・除外、doc スコープ、ページング、_detail_extras の doc 有無、ペインフラグメント表示、「もっと見る」URL が /item-type/.../items、fragment 検証(非 ItemType→404・bad UUID→400)。

ドキュメント

web-ui.md:CFItemType 逆参照の節+「どの情報がどの画面に出るか」総まとめ表に行追加。

CFConcept / CFLicense は同 FK パターンで将来追加可(現状データ無し)。Grouping は項目でなく関連を列挙するため別形。

デモデータ(DS・AI 群3テナントへの CFItemType 付与)は本 PR マージ後に別途対応(「2」)。

🤖 Generated with Claude Code

kentalow and others added 2 commits June 20, 2026 21:11
CFSubject の逆参照と同じ枠組みを CFItemType に展開。種別詳細ページ/ツリー
ペインに「この種別の項目」を表示する。スコープは案B(単独ページ=テナント横断/
ペイン=現ドキュメント)。種別は FK(cf_item.cf_item_type_id)なので JSONB/GIN
不要で軽い。

- repo: list_items_by_item_type / count_items_by_item_type(FK・document_id
  スコープ)。共通の select/count を _list_items_where / _count_items_where に抽出
- web.py: _detail_extras に CFItemType 分岐(item_type_items)、両ペイン経路、
  /item-type/{id}/items フラグメントルート、_items_fragment_ctx ヘルパー
- template: subject_items.html を items_endpoint 引数化して subject/item-type 共用、
  resource_detail.html に CFItemType セクション追加
- i18n: item_type_items_label(この種別の項目 / Items of this type)
- tests: tests/unit/test_item_type_items.py(FK絞り込み・doc スコープ・ページング・
  ペイン表示・もっと見る URL・fragment 検証)8件
- docs: web-ui.md(CFItemType 逆参照の節+総まとめ表に行追加)

CFConcept/License は同FKパターンで将来追加可(現状データ無し)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XXFogp18twGiPFBAZcqJw2
CFItemType 逆参照の tenant-wide クエリが seq-scan になるのを防ぐ。
Postgres は FK 列に索引を自動生成しないため「FK だから軽い」は誤りだった。

- migration e2b3c4d5f6a7(down_revision d1a2b3c4e5f6)
- cf_item.py __table_args__ に Index をミラー
- web-ui.md の「索引不要」記述を btree 索引ありに訂正

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
@kentalow kentalow merged commit 4963e3d into main Jun 20, 2026
2 checks passed
@kentalow kentalow deleted the feat/itemtype-reverse-items branch June 20, 2026 13:07
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.

1 participant