Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Push filtering, sorting and pagination into the database layer

オープン
#47 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
38/100
issue の種類
リファクタリング
明瞭さ
明確に書かれている
活発さ
活発
領域
backend, database

調査の方向性

まず LearnStack.Core/Services/LearningResourceService.cs:12-21 と :74-96 を読み、次に Resources.razor:636-643 と Pulse.razor.cs:60 を調べます。query/filter と paged-result の設計を導入する前に、現在のインメモリ操作がどのように動作するかを追跡します。完了の条件は、リソース一覧の各ページにつきクエリが 1 回、重複 URL のインデックス付き検索が 1 回であり、Pulse の集計のためにライブラリ全体をマテリアライズしないことです。

索引モデルが issue の本文から書いたものです。

説明

enhancement

Tier 2 — scale

Problem

GetAllAsync(userId) loads a user's entire library into memory (thumbnails included); the component then filters, sorts and pages it client-side. UrlExistsAsync loads every URL a user owns just to compare one. Pulse loads everything to compute aggregates. This is fine at 50 resources and collapses at 5,000.

Evidence
  • LearnStack.Core/Services/LearningResourceService.cs:12-21 — GetAllAsync
  • LearnStack.Core/Services/LearningResourceService.cs:74-96 — UrlExistsAsync materializes all URLs
  • LearnStack/Components/Pages/Resources.razor:636-643 — in-memory paging
  • LearnStack/Components/Pages/Pulse.razor.cs:60 — loads all resources for aggregates
Proposed fix
  1. Introduce a query/filter object and return a paged result (Items, TotalCount) from the service.
  2. Apply search, status/type/priority filters, sorting and Skip/Take in IQueryable.
  3. Add a persisted NormalizedUrl column with a unique index per user, and replace UrlExistsAsync with a single indexed lookup.
  4. Compute Pulse aggregates with GroupBy in SQL rather than in memory.
Acceptance criteria
  • Resource list issues one query per page regardless of library size
  • Duplicate-URL check is a single indexed query
  • Pulse does not materialize the full library
主要言語
HTML
スター
10
フォーク
0
平均マージ
2時間 35分
マージ済み PR(30日)
21

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

kasuken/LearnStack のほかの issue

kasuken/LearnStack の issue をすべて見る

似ている issue

Backend & API Design の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。