8.0 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous, requirements, must_haves
| phase | plan | type | wave | depends_on | files_modified | autonomous | requirements | must_haves | ||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 14-postgresql-migration | 04 | execute | 2 |
|
|
true |
|
|
Purpose: With services now async (Plan 03), route handlers must await them. Missing awaits would return Promise objects as JSON responses instead of actual data. Output: All route files properly await service calls.
<execution_context> @$HOME/.claude/get-shit-done/workflows/execute-plan.md @$HOME/.claude/get-shit-done/templates/summary.md </execution_context>
@.planning/PROJECT.md @.planning/ROADMAP.md @.planning/phases/14-postgresql-migration/14-CONTEXT.md @.planning/phases/14-postgresql-migration/14-RESEARCH.md @.planning/phases/14-postgresql-migration/14-03-SUMMARY.md@src/server/routes/items.ts @src/server/routes/settings.ts
Conversion rules for routes:
- Handler callback must be
async (c) => { ... } - Every service call:
const result = serviceFunction(db, ...)->const result = await serviceFunction(db, ...) - Settings route has direct DB calls: add
awaitand remove.all()/.get()/.run() - OAuth routes may have direct DB calls for token validation
- Ensure every handler callback is
async (c) => { ... }(many may already be async for body parsing) - Add
awaitbefore every service function call - If any handler has direct DB calls (
.select(),.insert(), etc.), apply the same rules as services: remove.all()/.get()/.run(), use destructuring for single rows
items.ts — Handlers call: getAllItems(db), getItemById(db, id), createItem(db, data), updateItem(db, id, data), duplicateItem(db, id), deleteItem(db, id). Add await before each.
categories.ts — Handlers call: getAllCategories(db), createCategory(db, data), updateCategory(db, id, data), deleteCategory(db, id). Add await before each.
threads.ts — Handlers call: getAllThreads(db), getThreadById(db, id), createThread(db, data), updateThread(db, id, data), deleteThread(db, id), resolveThread(db, id, data), unresolveThread(db, id), addCandidate(db, data), updateCandidate(db, id, data), removeCandidate(db, id), reorderCandidates(db, data). Add await before each.
setups.ts — Handlers call: getAllSetups(db), getSetupById(db, id), createSetup(db, data), updateSetup(db, id, data), deleteSetup(db, id), updateSetupItems(db, id, data), updateClassification(...). Add await before each.
totals.ts — Handlers call totals service functions. Add await before each.
! grep -n "= getAllItems|= getItemById|= createItem|= getAllCategories|= getAllThreads|= getAllSetups" src/server/routes/items.ts src/server/routes/categories.ts src/server/routes/threads.ts src/server/routes/setups.ts 2>/dev/null | grep -v "await" && echo "PASS" || echo "FAIL"
<acceptance_criteria>
- items.ts: every service call is preceded by await
- categories.ts: every service call is preceded by await
- threads.ts: every service call is preceded by await
- setups.ts: every service call is preceded by await
- totals.ts: every service call is preceded by await
- No route handler assigns a service call result without await
</acceptance_criteria>
All data route handlers properly await async service calls.
oauth.ts — Handlers call OAuth service functions. Add await before each service call. Also check for any direct DB queries in OAuth routes and apply async conversion.
settings.ts — This route likely accesses the database DIRECTLY (no service layer) using db.select().from(settings) etc. Apply full async conversion:
- Remove
.all()—const rows = await db.select().from(settings) - Remove
.get()—const [row] = await db.select().from(settings).where(...) - Remove
.run()—await db.insert(settings).values(...)
images.ts — May call image service functions. Add await before each service call.
Also check src/server/middleware/auth.ts — The auth middleware queries sessions and API keys. If it has direct DB calls, convert them:
- Make the middleware function async (if not already)
- Add
awaitbefore DB queries - Remove
.get()-> use destructuring ! grep -n ".all()|.get()|.run()" src/server/routes/settings.ts src/server/routes/auth.ts src/server/routes/oauth.ts src/server/routes/images.ts 2>/dev/null && echo "PASS" || echo "FAIL" <acceptance_criteria>- auth.ts: every service call is preceded by
await - oauth.ts: every service call is preceded by
await - settings.ts: does NOT contain
.all(),.get(), or.run() - settings.ts: contains
await db.select()andawait db.insert() - images.ts: every service call is preceded by
await - If auth middleware has DB calls, they are all awaited with no
.get()or.all()</acceptance_criteria> Auth, OAuth, settings, and images routes properly await all DB operations. Auth middleware updated if needed.
- auth.ts: every service call is preceded by
<success_criteria> All 9 route files await async service calls. Settings route uses async direct DB calls. No route handler will return a Promise object instead of resolved data. </success_criteria>
After completion, create `.planning/phases/14-postgresql-migration/14-04-SUMMARY.md`