refactor(backend): GitHubLinkCache の直クエリを repository へ集約#421
Conversation
BE_refacter の指摘(report/BE_report_20260627_2044.md)の High + Medium を適用。 - repositories/github_link.py に GitHubLinkCacheRepository を新設 (get_by_user / get_or_create)。get_or_create は IntegrityError 後の 再 SELECT が None なら RuntimeError を上げる(database.md 準拠) - 9 箇所の直クエリ(router/service/handler/context_builder)を repository 経由へ置換し layers.md パターン B 違反を解消 - routers/github_link.py を package 化し、HTTP 出力整形 to_skill_item を _responses.py へ分離 - chat_service.run_agent_chat の「呼び出し+トークン加算+ログ」を内部ヘルパへ 集約(ADR-0012 課金契約は不変) - get_or_create の競合パス単体テストを追加 make lint-backend / make test-backend(632 passed) / codegen-drift いずれも green。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (10)
📝 WalkthroughWalkthroughGitHub link cache access now goes through a repository layer across HTTP routes, services, and handlers, with new skill-to-response mapping and repository tests. Agent chat generation now shares token accounting across initial and retry calls. ChangesGitHub link cache refactor
Agent chat accounting
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
概要
BE_refacterの指摘(report/BE_report_20260627_2044.md)の High + Medium を適用。GitHubLinkCacheのfilter_by(user_id=...)直クエリが router / service / handler / context_builder の 9 箇所に散在していた負債を解消する。変更内容
High: GitHubLinkCacheRepository へ集約
repositories/github_link.py(新規)にGitHubLinkCacheRepositoryを新設(get_by_user/get_or_create)。get_or_createは IntegrityError → rollback → 再 SELECT、None ならRuntimeError(database.md「IntegrityError 後の再 SELECT は None を判定」準拠)。layers.mdパターン B(router への DB クエリ直書き)違反を解消。Medium
routers/github_link.pyを package 化(__init__/endpoints/_responses)。HTTP 出力整形to_skill_itemを_responses.pyへ分離(duplication.mdヒエラルキー準拠)。__init__がrouterを re-export するため呼び出し側は無改修。chat_service.run_agent_chatの「LLM 呼び出し + トークン加算 + ログ」を内部ヘルパ_generate_and_accountへ集約。ADR-0012 の課金合算・失敗時使用量伝播は不変。テスト
tests/test_github_link_cache_repository.py(新規・5 ケース)。正常系に加え、競合パス(IntegrityError → 再 SELECT で既存行返却 / 再 SELECT None で RuntimeError)を実 SQLite セッションで検証。補足
app/db/bootstrap.pyの bulk status クリーンアップ(cross-user・status フィルタ)は user_id 単一行 API の責務外のため対象外(次 PR 候補)。検証
make lint-backend: passmake test-backend: pass(632 passed)make codegen-types:web/src/api/generated.ts差分なし(OpenAPI drift なし)🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Bug Fixes
Tests