4.6 KiB
ResolveSpec - TODO List
This document tracks incomplete features and improvements for the ResolveSpec project.
Core Features to Implement
1. Column Selection and Filtering for Preloads
Location: pkg/resolvespec/handler.go:730
Status: Not Implemented
Description: Currently, preloads are applied without any column selection or filtering. This feature would allow clients to:
- Select specific columns for preloaded relationships
- Apply filters to preloaded data
- Reduce payload size and improve performance
Current Limitation:
// For now, we'll preload without conditions
// TODO: Implement column selection and filtering for preloads
// This requires a more sophisticated approach with callbacks or query builders
query = query.Preload(relationFieldName)
Required Implementation:
- Add support for column selection in preloaded relationships
- Implement filtering conditions for preloaded data
- Design a callback or query builder approach that works across different ORMs
2. Recursive JSON Cleaning
Location: pkg/restheadspec/handler.go:796
Status: Partially Implemented (Simplified)
Description: The current cleanJSON function returns data as-is without recursively removing null and empty fields from nested structures.
Current Limitation:
// This is a simplified implementation
// A full implementation would recursively clean nested structures
// For now, we'll return the data as-is
// TODO: Implement recursive cleaning
return data
Required Implementation:
- Recursively traverse nested structures (maps, slices, structs)
- Remove null values
- Remove empty objects and arrays
- Handle edge cases (circular references, pointers, etc.)
3. Custom SQL Join Support
Location: pkg/restheadspec/headers.go:159
Status: Not Implemented
Description: Support for custom SQL joins via the X-Custom-SQL-Join header is currently logged but not executed.
Current Limitation:
case strings.HasPrefix(normalizedKey, "x-custom-sql-join"):
// TODO: Implement custom SQL join
logger.Debug("Custom SQL join not yet implemented: %s", decodedValue)
Required Implementation:
- Parse custom SQL join expressions from headers
- Apply joins to the query builder
- Ensure security (SQL injection prevention)
- Support for different join types (INNER, LEFT, RIGHT, FULL)
- Works across different database adapters (GORM, Bun)
4. Proper Condition Handling for Bun Preloads
Location: pkg/common/adapters/database/bun.go:202
Status: Partially Implemented
Description: The Bun adapter's Preload method currently ignores conditions passed to it.
Current Limitation:
func (b *BunSelectQuery) Preload(relation string, conditions ...interface{}) common.SelectQuery {
// Bun uses Relation() method for preloading
// For now, we'll just pass the relation name without conditions
// TODO: Implement proper condition handling for Bun
b.query = b.query.Relation(relation)
return b
}
Required Implementation:
- Properly handle condition parameters in Bun's Relation() method
- Support filtering on preloaded relationships
- Ensure compatibility with GORM's condition syntax where possible
- Test with various condition types
Code Quality Improvements
5. Modernize Go Type Declarations
Location: pkg/common/types.go:5, 42, 64, 79
Status: Pending
Priority: Low
Description: Replace legacy interface{} with modern any type alias (Go 1.18+).
Affected Lines:
- Line 5: Function parameter or return type
- Line 42: Function parameter or return type
- Line 64: Function parameter or return type
- Line 79: Function parameter or return type
Benefits:
- More modern and idiomatic Go code
- Better readability
- Aligns with current Go best practices
Additional Considerations
Documentation
- Ensure all new features are documented in README.md
- Update examples to showcase new functionality
- Add migration notes if any breaking changes are introduced
Testing
- Add unit tests for each new feature
- Add integration tests for database adapter compatibility
- Ensure backward compatibility is maintained
Performance
- Profile preload performance with column selection and filtering
- Optimize recursive JSON cleaning for large payloads
- Benchmark custom SQL join performance
Priority Ranking
-
High Priority
- Column Selection and Filtering for Preloads (#1)
- Proper Condition Handling for Bun Preloads (#4)
-
Medium Priority
- Custom SQL Join Support (#3)
- Recursive JSON Cleaning (#2)
-
Low Priority
- Modernize Go Type Declarations (#5)
Last Updated: 2025-11-07