Implement hybrid filtering strategy for parks and rides

- Added comprehensive documentation for hybrid filtering implementation, including architecture, API endpoints, performance characteristics, and usage examples.
- Developed a hybrid pagination and client-side filtering recommendation, detailing server-side responsibilities and client-side logic.
- Created a test script for hybrid filtering endpoints, covering various test cases including basic filtering, search functionality, pagination, and edge cases.
This commit is contained in:
pacnpal
2025-09-14 21:07:17 -04:00
parent 0fd6dc2560
commit 35f8d0ef8f
42 changed files with 8490 additions and 224 deletions

View File

@@ -200,6 +200,13 @@ import type {
SearchFilters,
BoundingBox,
// Hybrid Rides Filtering Types
HybridRideData,
HybridRideFilterMetadata,
HybridRideResponse,
HybridRideFilters,
HybridRideProgressiveResponse,
// Queue Routing Response Types
QueueRoutingResponse,
AutoApprovedResponse,
@@ -853,6 +860,42 @@ export const parksApi = {
// ============================================================================
export const ridesApi = {
// Hybrid filtering (recommended)
async getHybridRides(filters?: HybridRideFilters): Promise<HybridRideResponse> {
const searchParams = new URLSearchParams();
if (filters) {
Object.entries(filters).forEach(([key, value]) => {
if (value !== undefined && value !== null && value !== '') {
searchParams.append(key, value.toString());
}
});
}
const query = searchParams.toString();
return makeRequest<HybridRideResponse>(`/rides/hybrid/${query ? `?${query}` : ''}`);
},
async getHybridRidesProgressive(filters?: HybridRideFilters & { offset: number }): Promise<HybridRideProgressiveResponse> {
const searchParams = new URLSearchParams();
if (filters) {
Object.entries(filters).forEach(([key, value]) => {
if (value !== undefined && value !== null && value !== '') {
searchParams.append(key, value.toString());
}
});
}
const query = searchParams.toString();
return makeRequest<HybridRideProgressiveResponse>(`/rides/hybrid/progressive/${query ? `?${query}` : ''}`);
},
async getHybridRideFilterMetadata(): Promise<HybridRideFilterMetadata> {
return makeRequest<HybridRideFilterMetadata>('/rides/hybrid/filter-metadata/');
},
// Legacy rides listing
async getRides(filters?: SearchFilters): Promise<RideListResponse> {
const searchParams = new URLSearchParams();