John Yeo
|
e6077458a2
|
feat: new attach / update subscription params
|
2026-02-17 12:48:11 +00:00 |
|
John Yeo
|
3d83472397
|
chore: cleaned up current api plan files to prepare for new schema
|
2026-02-08 17:49:55 -08:00 |
|
John Yeo
|
c3ac0bca48
|
fix: merging entity cus feature legacy data and passing ctx down to version change module
|
2025-12-02 10:12:57 +00:00 |
|
John Yeo
|
6a618b67a4
|
chore: solving type errors in test files
|
2025-11-11 18:04:55 +00:00 |
|
John Yeo
|
acae1179a4
|
fix: cancel end of cycle additional add on
|
2025-11-11 15:09:01 +00:00 |
|
John Yeo
|
526dfc0a8c
|
Merge branch 'staging' into refactor-customer-to-plan
merge staging
|
2025-10-27 10:44:32 -07:00 |
|
John Yeo
|
ae898c7521
|
feat: refactored check to use versioning system
|
2025-10-27 09:36:53 -07:00 |
|
John Yeo
|
fb2f3bbd71
|
wip
|
2025-10-25 12:50:56 +01:00 |
|
John Yeo
|
dcc26b44a9
|
wip
|
2025-10-25 10:52:03 +01:00 |
|
John Yeo
|
26fb430e6b
|
chore: fix type errors and ran test
|
2025-10-08 10:27:11 +01:00 |
|
John Yeo
|
908dd62eb1
|
feat: new versioning system
|
2025-10-08 09:16:42 +01:00 |
|
John Yeo
|
eefaf5b6c3
|
wip
|
2025-10-07 11:15:53 +01:00 |
|
John Yeo
|
1847470403
|
feat: implement resource-based API versioning system with strong typing
## Summary
Implemented a comprehensive API versioning system with resource-level version changes,
strong typing using Zod schemas, and a composable getApi* pattern.
## Key Changes
### Versioning Infrastructure
- **VersionChange base class**: Now strongly typed with Zod schemas (TNewSchema, TOldSchema, TDataSchema)
- **Bidirectional transforms**: `transformRequest` (old→new) and `transformResponse` (new→old)
- **Input + Data pattern**: `input` for version-specific data, `data` for additional context
- **applyVersionChanges**: Fixed TypeScript errors and added biome-ignore comments for necessary `any` types
### Resource Organization
- **Folder structure**: Each resource gets its own `changes/` folder
- `shared/api/customers/changes/` - Customer-level changes
- `shared/api/customers/cusProducts/changes/` - Product-level changes
- `shared/api/customers/cusFeatures/changes/` - Feature-level changes
### Version Changes (Strongly Typed)
- **V0_2_ProductItems**: Products gained items field (V0_2+ → V0_1)
- **V1_2_FeaturesArrayToObject**: Features object ↔ array (V1_2 → V1_1)
- **V1_1_MergedResponse**: Merged customer response ↔ split (V1_1+ → V1_0)
- **V1_1_LegacyExpandInvoices**: Side-effect only (invoices auto-expand in V1_0)
### getApi* Pattern (server/src/internal/customers/cusUtils/apiCusUtils/)
- **getApiCusProduct**: Builds product in latest format, applies V0_2_ProductItems transform
- **getApiCusFeature**: Transforms balances (used→usage), applies V1_2_FeaturesArrayToObject
- **getApiCustomer**: Orchestrates products/features, merges, applies V1_1_MergedResponse
### V2 Handler Demo
- **handleGetCustomerV2**: Demonstrates zero version branching in handler
- Calls `getApiCustomer` which handles all versioning internally
- Side effects handled explicitly (expand invoices for V1_0)
## Type Safety
- All version changes use Zod schemas for input/output types
- Runtime validation with `parse()` ensures data integrity
- Compile-time type checking catches transformation errors
- Context data support via optional `data` parameter
## Benefits
✅ No scattered if-else version checks
✅ Composable resource-based architecture
✅ Strong typing with Zod schemas
✅ Self-documenting version changes
✅ Easy to add new versions
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-06 19:25:21 +01:00 |
|
John Yeo
|
feca672fab
|
working on get api cus feature
|
2025-10-06 14:16:51 +01:00 |
|
John Yeo
|
e7a78bfc8d
|
working on api versioning system
|
2025-10-06 10:03:12 +01:00 |
|