|
|
@@ -1,27 +1,27 @@
|
|
|
# Implementation Plan
|
|
|
|
|
|
- [ ] 1. (P) ShareLink バリデーションサービスの実装とテスト
|
|
|
-- [ ] 1.1 ShareLink のデータベースバリデーション関数を実装する
|
|
|
+- [ ] 1.1 (P) ShareLink のデータベースバリデーション関数を実装する
|
|
|
- share link ID とページ ID の両方を照合条件とした単一クエリで ShareLink を取得し、ミドルウェアで行っていた二重クエリを解消する
|
|
|
- 照合成功・リンク未存在/pageId 不一致・期限切れの 3 パターンを判別可能な結果型(discriminated union)で返す
|
|
|
- `disableLinkSharing` 設定の確認はハンドラー層に委ねて関数の責務を DB バリデーションのみに限定する
|
|
|
- `server/service/share-link/` ディレクトリを新規作成してこのサービスを配置し、将来的に他ルートからも再利用できる構造にする
|
|
|
- _Requirements: 2.1, 2.2, 2.3, 2.4_
|
|
|
|
|
|
-- [ ] 1.2 バリデーション関数のユニットテストを実装する
|
|
|
+- [ ] 1.2 (P) バリデーション関数のユニットテストを実装する
|
|
|
- 有効なリンク(ShareLink が存在・relatedPage が一致・期限内)のとき成功結果を返すことを確認する
|
|
|
- ShareLink が存在しない、または relatedPage が pageId と不一致のとき "not-found" 結果を返すことを確認する
|
|
|
- `isExpired()` が true のとき "expired" 結果を返すことを確認する
|
|
|
- _Requirements: 2.1, 2.2, 2.3, 2.4_
|
|
|
|
|
|
- [ ] 2. (P) ページレスポンスユーティリティの抽出とテスト
|
|
|
-- [ ] 2.1 既存ページ取得ハンドラー内のレスポンス生成ロジックを共有ユーティリティとして抽出する
|
|
|
+- [ ] 2.1 (P) 既存ページ取得ハンドラー内のレスポンス生成ロジックを共有ユーティリティとして抽出する
|
|
|
- `GET /page` ハンドラー内のインライン関数(ページデータ・meta を受け取って API レスポンスを返す処理)を独立したモジュール関数に変換する
|
|
|
- レスポンスオブジェクト・ページデータ・オプション(revisionId・disableUserPages)を引数として受け取るよう設計する
|
|
|
- 既存の `GET /page` ハンドラーがこのユーティリティを import して使用するよう書き換え、動作が変わらないことを確認する
|
|
|
- _Requirements: 5.3_
|
|
|
|
|
|
-- [ ] 2.2 レスポンスユーティリティのユニットテストを実装する
|
|
|
+- [ ] 2.2 (P) レスポンスユーティリティのユニットテストを実装する
|
|
|
- ページが forbidden(`isForbidden: true`)のとき 403 が返ることを確認する
|
|
|
- ページが見つからない(`isNotFound: true`)のとき 404 が返ることを確認する
|
|
|
- `disableUserPages` が有効なユーザーページで 403 が返ることを確認する
|