# 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:** ```go // 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:** ```go // 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:** ```go 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:** ```go 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 --- ### 6. Pre / Post select/update/delete query in transaction. - This will allow us to set a user before doing a select - When making changes, we can have the trigger fire with the correct user. - Maybe wrap the handleRead,Update,Create,Delete handlers in a transaction with context that can abort when the request is cancelled or a configurable timeout is reached. ## 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 1. **High Priority** - Column Selection and Filtering for Preloads (#1) - Proper Condition Handling for Bun Preloads (#4) 2. **Medium Priority** - Custom SQL Join Support (#3) - Recursive JSON Cleaning (#2) 3. **Low Priority** - Modernize Go Type Declarations (#5) --- **Last Updated:** 2025-11-07