Scaffolding Modern API Routes
Translate legacy Express route definitions and middleware chains into modern Next.js Route Handlers with built-in validation and unified session management.
Objective
Rebuild the documented API surface to ensure 1:1 functional parity with the legacy system, focusing on mapping Express Middlewares to Next.js Route Guards.
Instructions for the Scaffold Subagent
Copy this checklist and track your progress:
Task Progress:
- [ ] Step 1: Analyze API Contracts
- [ ] Step 2: Establish Route Architecture
- [ ] Step 3: Map Middleware to Guards
- [ ] Step 4: Implement Zod-Backed Request Validation
- [ ] Step 5: Implement Resource Handlers
Step 1. Analyze API Contracts
Locate and read docs/legacy-audit/API_Contracts.md. Identify:
- Primary Routes & Sub-routes: Map these to the Next.js App Router (e.g.,
/api/[resource]/[sub-resource]/route.ts). - Legacy Middleware Requirements: Identify routes protected by Passport, custom "owner-only" checks, or roles.
Step 2. Establish Route Architecture
Create the folder structure in src/app/api/ representing the resources. Ensure that:
- Dynamic Segments (e.g.,
[id]) are used for resource-specific operations (GET single, PUT, DELETE). - Index Segments (e.g.,
/api/posts/route.ts) are used for collection operations (GET list, POST new).
Step 3. Map Middleware to Guards
Translate legacy Express middleware chains into Modular Route Guards:
- Authentication: Map
requiresLoginto agetServerSession(authOptions)check. - Authorization (Ownership): Map
resourceAuth.hasAuthorizationto a "Resource Ownership Guard" (e.g.,if (resource.user_id !== session.user.id) throw Unauthorized). - Authorization (Roles): Map role-specific middleware to logic that checks
session.user.role.
Step 4. Implement Zod-Backed Request Validation
For every incoming request (POST, PUT, PATCH):
- Use the Zod Schemas defined in
src/lib/models/schema.ts(from Step 3) to validatereq.json(). - Ensure the API returns a standard
422 Unprocessable Entityor400 Bad Requestwith a detailed error payload if validation fails.
Step 5. Implement Resource Handlers
Write the GET, POST, PUT, PATCH, and DELETE functions.
- Strict Response Envelopes: Match the Common Response Envelope identified in the audit (e.g., whether to return a raw object or a wrapped
{ data: ... }). - Pagination & Sorting: Implement
skip,limit, andsortparameters to mirror the legacy behavior precisely. - Status Code Parity: Match the exact success and error status codes documented in
API_Contracts.md.