Files
Sankofa/docs/archive/status/BUG_FIXES_2025-12-09.md
defiQUG 7cd7022f6e Update .gitignore, remove package-lock.json, and enhance Cloudflare and Proxmox adapters
- Added lock file exclusions for pnpm in .gitignore.
- Removed obsolete package-lock.json from the api and portal directories.
- Enhanced Cloudflare adapter with additional interfaces for zones and tunnels.
- Improved Proxmox adapter error handling and logging for API requests.
- Updated Proxmox VM parameters with validation rules in the API schema.
- Enhanced documentation for Proxmox VM specifications and examples.
2025-12-12 19:29:01 -08:00

69 lines
2.9 KiB
Markdown

# Bug Fixes - December 9, 2025
## Bug 1: Unreachable Return Statement in `costOptimization` Resolver
### Issue
The `costOptimization` resolver in `api/src/schema/resolvers.ts` had an unreachable return statement at line 407. Lines 397-406 already returned the mapped recommendations, making line 407 dead code that would never execute.
### Root Cause
Incomplete refactoring where both the mapped return value and the original return statement were left in place.
### Fix
Removed the unreachable `return billingService.getCostOptimization(args.tenantId)` statement at line 407.
### Files Changed
- `api/src/schema/resolvers.ts` (line 407)
---
## Bug 2: N+1 Query Problem in `getResources` Function
### Issue
The `getResources` function in `api/src/services/resource.ts` executed one query to fetch resources, then called `mapResource` for each row. The `mapResource` function executed an additional database query to fetch site information for every resource (line 293). This created an N+1 query problem: if you fetched 100 resources, you executed 101 queries instead of 1-2 optimized queries.
### Impact
- **Performance**: Severely degraded performance with large datasets
- **Database Load**: Unnecessary database load and connection overhead
- **Scalability**: Does not scale well as the number of resources grows
### Root Cause
The original implementation fetched resources first, then made individual queries for each resource's site information.
### Fix
1. **Modified `getResources` function** to use a `LEFT JOIN` query that fetches both resources and sites in a single database query
2. **Created `mapResourceWithSite` function** to map the joined query results without making additional database queries
3. **Preserved `mapResource` function** for single resource lookups (used by `getResource` and other functions)
### Performance Improvement
- **Before**: N+1 queries (1 for resources + N for sites)
- **After**: 1 query (resources and sites joined)
- **Example**: Fetching 100 resources now uses 1 query instead of 101 queries
### Files Changed
- `api/src/services/resource.ts`:
- Modified `getResources` function (lines 47-92)
- Added `mapResourceWithSite` function (lines 303-365)
- Preserved `mapResource` function for backward compatibility
---
## Testing Recommendations
1. **Bug 1**: Verify that `costOptimization` resolver returns the correct recommendations without errors
2. **Bug 2**:
- Test `getResources` with various filter combinations
- Verify that site information is correctly populated
- Monitor database query count to confirm N+1 problem is resolved
- Test with large datasets (100+ resources) to verify performance improvement
---
## Verification
Both bugs have been verified:
- ✅ Bug 1: Unreachable code removed
- ✅ Bug 2: N+1 query problem fixed with JOIN query
- ✅ No linter errors introduced
- ✅ Backward compatibility maintained (single resource lookups still work)