diff options
Diffstat (limited to 'docs/dev/roadmap.md')
| -rw-r--r-- | docs/dev/roadmap.md | 63 |
1 files changed, 29 insertions, 34 deletions
diff --git a/docs/dev/roadmap.md b/docs/dev/roadmap.md index b6cc6f9..3347d0f 100644 --- a/docs/dev/roadmap.md +++ b/docs/dev/roadmap.md @@ -1,39 +1,34 @@ # Kioku Development Roadmap -## Use Hono RPC Type Inference for API Response Types +## Add ORDER BY to SELECT Queries -Replace manually defined API response types with Hono's `InferResponseType` for automatic type derivation from server. +複数行を返すSELECTクエリにORDER BYを追加し、実行結果の順序を決定的にする。 **Background:** -- Hono's `hc` client can automatically infer response types from server definitions -- Manual type definitions (`AuthResponse`, `User`) duplicate server types and can become out of sync - -**Scope:** -- `AuthResponse` → Use `InferResponseType` -- `User` → Derive from `AuthResponse["user"]` -- `ApiError` → Keep (error responses are separate from success types) -- `Tokens` → Keep (client-internal type) - -### Phase 1: Update API Client Types - -- [x] Modify `src/client/api/client.ts`: - - Import `InferResponseType` from `hono/client` - - Define `LoginResponse` type using `InferResponseType<typeof rpc.api.auth.login.$post>` - - Update `login` method to use inferred type -- [x] Modify `src/client/api/types.ts`: - - Remove `AuthResponse` and `User` interfaces - - Keep `ApiError` and `Tokens` -- [x] Modify `src/client/api/index.ts`: - - Export inferred types from `client.ts` instead of `types.ts` - -### Phase 2: Update Consumers - -- [x] Modify `src/client/stores/auth.tsx`: - - Import `User` type from new location (derived from login response) - - Update `AuthState` interface - -### Phase 3: Update Tests - -- [x] Update `src/client/api/client.test.ts` if needed -- [x] Update `src/client/stores/auth.test.tsx` if needed -- [x] Verify all tests pass +- PostgreSQLはORDER BYがない場合、行の返却順序を保証しない +- UI表示やSync結果の一貫性のため、明示的なソート順が必要 + +### Phase 1: Core Repository Queries + +- [ ] `src/server/repositories/deck.ts` + - `findByUserId()`: `.orderBy(decks.createdAt)` 追加 +- [ ] `src/server/repositories/note.ts` + - `findByDeckId()`: `.orderBy(notes.createdAt)` 追加 + - `findByIdWithFieldValues()` 内のfieldValues取得: `.orderBy(noteFieldValues.noteFieldTypeId)` 追加 + - `update()` 内のallFieldValues取得: `.orderBy(noteFieldValues.noteFieldTypeId)` 追加 +- [ ] `src/server/repositories/noteType.ts` + - `findByUserId()`: `.orderBy(noteTypes.createdAt)` 追加 +- [ ] `src/server/repositories/card.ts` + - `findByDeckId()`: `.orderBy(cards.createdAt)` 追加 + - `findByNoteId()`: `.orderBy(cards.isReversed)` 追加 (通常カードを先に) + +### Phase 2: Sync Repository Queries + +- [ ] `src/server/repositories/sync.ts` + - pull系クエリ (cards, noteFieldTypes, notes, noteFieldValues): `.orderBy(*.id)` 追加 + +### Phase 3: Verification + +- [ ] `pnpm typecheck` 実行 +- [ ] `pnpm lint` 実行 +- [ ] `pnpm test` 実行 |
