Repository (リポジトリ)
Repository は、このライブラリの中核となるコンポーネントです。 API から取得したプロトタイプ情報をメモリに保存し、高速に検索・アクセスする機能を提供します。
役割
Repository は以下の役割を担います:
- データの一元管理: 外部 API から取得したデータをメモリ上の Store に保持します。
- 抽象化されたアクセス: データの取得元(API なのかキャッシュなのか)を意識せずにデータを扱えるようにします。
- ライフサイクル管理: データの有効期限(TTL)を管理し、必要に応じて自動的にリフレッシュを促したり、状態を報告したりします。
主な機能
データの初期読み込み (Setup)
最初に使用する前に、データをメモリにロードする必要があります。
typescript
const result = await repository.setupSnapshot({
limit: 1000, // 最大読み込み件数
});
if (!result.ok) {
console.error('Failed to setup snapshot:', result.message);
}高速な検索 (Query)
メモリ上に展開されたデータに対して、同期的かつ高速にアクセスできます。
typescript
// IDで直接取得 (O(1))
const prototype = await repository.getPrototypeFromSnapshotByPrototypeId(123);
// 全件取得してフィルタリング
const all = await repository.getAllFromSnapshot();
const completed = all.filter((p) => p.status === 3);データの更新 (Refresh)
データが古くなった場合、API から最新情報を取得してメモリ内のデータを更新します。
typescript
const result = await repository.refreshSnapshot();
if (!result.ok) {
console.error('Failed to refresh snapshot:', result.message);
}内部構造
Repository は内部的に以下のコンポーネントを組み合わせて動作します:
- Store: 実際にデータをメモリに保持するストレージ。
- ApiClient: 外部の ProtoPedia API と通信するクライアント。
- Logger: 動作ログを記録するロガー。
通常、ユーザーはこれらの内部コンポーネントを意識する必要はありませんが、Builder を使用することで個別にカスタマイズすることも可能です。
詳細ドキュメント
より詳細な仕様や設計については、以下のドキュメントを参照してください: