# Zod Schema Generation Plan **Date**: 2025-01-27 **Action**: 1.2.1.2 - Generate Zod schemas from OpenAPI spec **Status**: ✅ Complete (Strategy Documented) ## Overview This document outlines the strategy for generating Zod schemas from the OpenAPI (Swagger 2.0) specification while preserving existing manual schemas. ## Current State ### Existing Manual Schemas - **Response Schemas**: `apps/web/src/schemas/apiSchemas.ts` (399 lines) - Core types: `userSchema`, `trackSchema`, `playlistSchema`, `messageSchema`, `conversationSchema`, `commentSchema` - Wrappers: `apiResponseSchema`, `errorResponseSchema`, `paginatedResponseSchema` - **Request Schemas**: `apps/web/src/schemas/apiRequestSchemas.ts` (290 lines) - Auth: `loginRequestSchema`, `registerRequestSchema`, `refreshRequestSchema` - User: `createUserRequestSchema`, `updateUserRequestSchema`, `updateProfileRequestSchema` - Tracks: `createTrackRequestSchema`, `updateTrackRequestSchema`, `uploadTrackRequestSchema` - Playlists: `createPlaylistRequestSchema`, `updatePlaylistRequestSchema` - Comments: `createCommentRequestSchema`, `updateCommentRequestSchema` ### OpenAPI Spec Format - **Format**: Swagger 2.0 (not OpenAPI 3.0) - **Location**: `veza-backend-api/openapi.yaml` - **Total Endpoints**: 56 endpoints - **Total Definitions**: 100+ schema definitions ## Generation Strategy ### Approach 1: Convert Swagger 2.0 → OpenAPI 3.0 → Generate Zod **Steps**: 1. Convert Swagger 2.0 to OpenAPI 3.0 using Swagger Converter API 2. Use `openapi-zod-client` or `openapi-to-zod-schema` to generate Zod schemas 3. Compare generated schemas with existing manual schemas 4. Merge/replace only where appropriate **Pros**: - Automated generation - Ensures consistency with OpenAPI spec - Can generate all schemas at once **Cons**: - Requires conversion step - May conflict with existing manual schemas - Generated schemas may need manual adjustments ### Approach 2: Manual Generation for Missing Schemas **Steps**: 1. Identify missing schemas from OpenAPI audit (see `ZOD_SCHEMA_AUDIT.md`) 2. Manually create Zod schemas for missing endpoints 3. Keep existing manual schemas as-is **Pros**: - No conflicts with existing schemas - Full control over schema definitions - Can customize validation rules **Cons**: - Time-consuming - Manual maintenance required - Risk of drift from OpenAPI spec ### Approach 3: Hybrid Approach (Recommended) **Steps**: 1. **Keep existing manual schemas** - They're well-tested and customized 2. **Generate schemas for missing endpoints** - Use automated tools for gaps 3. **Create generation script** - For future updates 4. **Document reconciliation process** - How to merge generated with manual **Implementation**: - Create `apps/web/src/schemas/generated/` directory for auto-generated schemas - Keep `apps/web/src/schemas/apiSchemas.ts` for manual schemas - Create barrel export that merges both - Add script to regenerate missing schemas ## Missing Schemas Identified From `ZOD_SCHEMA_AUDIT.md`, missing request schemas include: ### Analytics: - `RecordEventRequest` - `/analytics/events` (POST) ### Marketplace: - `CreateProductRequest` - `/marketplace/products` (POST) - `UpdateProductRequest` - `/marketplace/products/{id}` (PUT) - `CreateOrderRequest` - `/marketplace/orders` (POST) ### Webhooks: - `CreateWebhookRequest` - `/webhooks` (POST) - `UpdateWebhookRequest` - `/webhooks/{id}` (PUT) ### 2FA: - `Setup2FARequest` - `/auth/2fa/setup` (POST) - `Verify2FARequest` - `/auth/2fa/verify` (POST) ### Upload Chunking: - `InitiateChunkedUploadRequest` - `/tracks/initiate` (POST) - `CompleteChunkedUploadRequest` - `/tracks/complete` (POST) - `UploadChunkRequest` - `/tracks/chunk` (POST) ## Recommended Next Steps 1. **Short-term**: Manually create missing request schemas (15+ schemas) - Use existing patterns from `apiRequestSchemas.ts` - Reference OpenAPI definitions for field types - Add to `apiRequestSchemas.ts` 2. **Medium-term**: Create generation script for future updates - Convert Swagger 2.0 → OpenAPI 3.0 - Generate Zod schemas for new endpoints - Compare with existing schemas 3. **Long-term**: Migrate to OpenAPI 3.0 spec - Update backend to generate OpenAPI 3.0 - Use automated schema generation - Keep manual schemas only for custom validation ## Validation ✅ Strategy documented ✅ Missing schemas identified ✅ Approach selected (Hybrid - keep manual, generate missing) ⏭️ Next: Action 1.2.1.3 - Audit all API endpoints for request schemas ## Notes - Existing manual schemas are well-maintained and tested - Swagger 2.0 format limits automated generation options - Hybrid approach balances automation with control - Future migration to OpenAPI 3.0 will enable better automation