- Update `getResourceDocsList` to include v7.0.0 in `ResourceDocsAPIMethods`
- Modify `Http4s700` to utilize centralized `ResourceDocs140` for fetching resource docs
- Simplify resource docs filtering logic for v7.0.0 with tailored handling
- Add `v7_0_0` to supported API versions in `ApiVersionUtils`
- Update `Http4s700` to return pre-defined resource docs instead of scanning for version 7.0.0
- Introduce `getResourceDocsObpV700` to handle resource docs retrieval for API version 7.0.0
- Add `getResourceDocsList` helper function for fetching version-specific resource docs
- Update `allRoutes` to include the new endpoint
- Modify imports to include necessary utilities and remove unused references
- Add `Http4sEndpoint` type alias and `http4sPartialFunction` in APIUtil for handling http4s routes
- Refactor Http4s700 to define routes as standalone functions (e.g., `root`, `getBanks`) within Implementations7_0_0 object
- Attach resource documentation to each route for better maintainability
- Create a unified `allRoutes` combining v7.0.0 route handlers
- Update imports and clean up unused references
Changed from full timestamp to hour-only format to match implementation.
OLD: /active-rate-limits/2025-12-31T13:34:46Z (YYYY-MM-DDTHH:MM:SSZ)
NEW: /active-rate-limits/2025-12-31-13 (YYYY-MM-DD-HH)
Benefits:
- API now matches actual implementation (hour-level caching)
- Eliminates timezone/minute truncation confusion
- Clearer semantics: 'active during this hour' not 'at this second'
- Direct cache key mapping improves performance
- Simpler date parsing (no timezone handling needed)
Files changed:
- APIMethods600.scala: Updated endpoint and date parsing
- RateLimitsTest.scala: Updated all test cases to new format
- Glossary.scala: Updated API documentation
- introductory_system_documentation.md: Updated user docs
This is a breaking change but necessary to align API with implementation.
Rate limits are cached and queried at hour granularity, so the API
should reflect that reality.
Bug #1: getActiveCallLimitsByConsumerIdAtDate ignored date parameter
- Used LocalDateTime.now() instead of provided date parameter
- Broke queries for future dates
- API endpoint /active-rate-limits/{DATE} was non-functional
Bug #2: Hour-based caching caused off-by-minute timing bug
- Query truncated to start of hour (12:00:00)
- Rate limits created mid-hour (12:01:47) not found
- Condition: fromDate <= 12:00:00 failed when fromDate = 12:01:47
Bug #3: Timezone mismatch between system and tests
- Code used ZoneId.systemDefault() (CET/CEST)
- Tests use ZoneOffset.UTC
- Caused hour boundary mismatches
Solution:
- Use actual date parameter in getActiveCallLimitsByConsumerIdAtDate
- Query full hour range (12:00:00 to 12:59:59) instead of point-in-time
- Use UTC timezone consistently
- Add debug logging for troubleshooting
Note: Test still failing - may be cache or transaction timing issue.
Further investigation needed.
See RATE_LIMITING_BUG_FIX.md for detailed analysis.
Bug #1: getActiveCallLimitsByConsumerIdAtDate ignored the date parameter
- Always used LocalDateTime.now() instead of the provided date
- Broke queries for future dates
- API endpoint /active-rate-limits/{DATE} was non-functional
Bug #2: Hour-based caching created off-by-minute query bug
- Query truncated to start of hour (12:00:00)
- Rate limits created mid-hour (12:01:47) were not found
- Condition: fromDate <= 12:00:00 failed when fromDate = 12:01:47
Solution:
- Use the actual date parameter in getActiveCallLimitsByConsumerIdAtDate
- Query full hour range (12:00:00 to 12:59:59) instead of point-in-time
- Ensures rate limits created anytime during the hour are found
Fixes test: RateLimitsTest.scala:259 - aggregated rate limits
Expected: 15 (10 + 5), Got: -1 (not found) → Now returns: 15 ✅
See RATE_LIMITING_BUG_FIX.md for detailed analysis.