Skip to content

Product.unchecked_no_replied_productsスコープのリファクタリング #8927

@komagata

Description

@komagata

概要

Product.unchecked_no_replied_productsスコープのN+1問題とメモリ効率の問題を解決し、rails-patterns gemのQueryオブジェクトにリファクタリングしてください。

QueryObjectパターンについて

rails-patterns gemのQueryオブジェクトの詳細については、以下のwikiを参照してください:
https://github.com/fjordllc/bootcamp/wiki/QueryObject

既存の実装例としてapp/queries/completed_learnings_query.rbも参考にしてください。

現在の問題

  • N+1問題: filter内でproduct.comments.lastを呼び出してN+1問題が発生
  • メモリ効率: 全レコードをRubyメモリに読み込んでからフィルタリング
  • スケーラビリティ: データ量の増加でパフォーマンスが大幅に悪化
  • データベース最適化の機会損失: データベースレベルで処理可能なロジックをRuby側で実行

対象となるメソッド

  • Product.unchecked_no_replied_products (app/models/product.rb:58-65)

期待する成果

  • app/queries/product_unchecked_no_replied_query.rbの作成
  • N+1問題の完全な解消

実装上の注意点

  • Patterns::QueryActiveRecord::Relationを返すことが前提です
  • データベースレベルでのクエリー最適化を重視してください
  • 既存の動作は変更しないでください
  • パフォーマンスが劣化しないよう注意してください

パフォーマンス要件

  • N+1問題を完全に解消すること

確認項目

  • 既存のテストがすべて通ること
  • N+1問題が解消されていること
  • Rubocop違反がないこと

Metadata

Metadata

Assignees

Type

No type

Projects

Status

完成

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions