handle pagination on query
This commit is contained in:
parent
3bc142f4f7
commit
5c802df529
15
.env.dist
15
.env.dist
|
@ -47,19 +47,16 @@ MAX_DETOUR_DURATION_RATIO=0.3
|
||||||
GEOROUTER_TYPE=graphhopper
|
GEOROUTER_TYPE=graphhopper
|
||||||
# georouter url
|
# georouter url
|
||||||
GEOROUTER_URL=http://localhost:8989
|
GEOROUTER_URL=http://localhost:8989
|
||||||
|
# default carpool departure time margin (in seconds)
|
||||||
# DEFAULT CARPOOL DEPARTURE TIME MARGIN (in seconds)
|
|
||||||
DEPARTURE_TIME_MARGIN=900
|
DEPARTURE_TIME_MARGIN=900
|
||||||
|
# default role
|
||||||
# DEFAULT ROLE
|
|
||||||
ROLE=passenger
|
ROLE=passenger
|
||||||
|
# seats proposes as driver / requested as passenger
|
||||||
# SEATS PROPOSED AS DRIVER / REQUESTED AS PASSENGER
|
|
||||||
SEATS_PROPOSED=3
|
SEATS_PROPOSED=3
|
||||||
SEATS_REQUESTED=1
|
SEATS_REQUESTED=1
|
||||||
|
# accept only same frequency requests
|
||||||
# ACCEPT ONLY SAME FREQUENCY REQUESTS
|
|
||||||
STRICT_FREQUENCY=false
|
STRICT_FREQUENCY=false
|
||||||
|
|
||||||
# default timezone
|
# default timezone
|
||||||
TIMEZONE=Europe/Paris
|
TIMEZONE=Europe/Paris
|
||||||
|
# number of matching results per page
|
||||||
|
PER_PAGE=10
|
||||||
|
|
|
@ -16,4 +16,5 @@ export type DefaultParams = {
|
||||||
AZIMUTH_MARGIN: number;
|
AZIMUTH_MARGIN: number;
|
||||||
MAX_DETOUR_DISTANCE_RATIO: number;
|
MAX_DETOUR_DISTANCE_RATIO: number;
|
||||||
MAX_DETOUR_DURATION_RATIO: number;
|
MAX_DETOUR_DURATION_RATIO: number;
|
||||||
|
PER_PAGE: number;
|
||||||
};
|
};
|
||||||
|
|
|
@ -49,6 +49,10 @@ export class MatchQueryHandler implements IQueryHandler {
|
||||||
maxDetourDistanceRatio: this._defaultParams.MAX_DETOUR_DISTANCE_RATIO,
|
maxDetourDistanceRatio: this._defaultParams.MAX_DETOUR_DISTANCE_RATIO,
|
||||||
maxDetourDurationRatio: this._defaultParams.MAX_DETOUR_DURATION_RATIO,
|
maxDetourDurationRatio: this._defaultParams.MAX_DETOUR_DURATION_RATIO,
|
||||||
})
|
})
|
||||||
|
.setDefaultPagination({
|
||||||
|
page: 1,
|
||||||
|
perPage: this._defaultParams.PER_PAGE,
|
||||||
|
})
|
||||||
.setDatesAndSchedule(this.datetimeTransformer);
|
.setDatesAndSchedule(this.datetimeTransformer);
|
||||||
await query.setRoutes();
|
await query.setRoutes();
|
||||||
|
|
||||||
|
|
|
@ -33,8 +33,8 @@ export class MatchQuery extends QueryBase {
|
||||||
azimuthMargin?: number;
|
azimuthMargin?: number;
|
||||||
maxDetourDistanceRatio?: number;
|
maxDetourDistanceRatio?: number;
|
||||||
maxDetourDurationRatio?: number;
|
maxDetourDurationRatio?: number;
|
||||||
readonly page?: number;
|
page?: number;
|
||||||
readonly perPage?: number;
|
perPage?: number;
|
||||||
driverRoute?: Route;
|
driverRoute?: Route;
|
||||||
passengerRoute?: Route;
|
passengerRoute?: Route;
|
||||||
backAzimuth?: number;
|
backAzimuth?: number;
|
||||||
|
@ -61,8 +61,8 @@ export class MatchQuery extends QueryBase {
|
||||||
this.azimuthMargin = props.azimuthMargin;
|
this.azimuthMargin = props.azimuthMargin;
|
||||||
this.maxDetourDistanceRatio = props.maxDetourDistanceRatio;
|
this.maxDetourDistanceRatio = props.maxDetourDistanceRatio;
|
||||||
this.maxDetourDurationRatio = props.maxDetourDurationRatio;
|
this.maxDetourDurationRatio = props.maxDetourDurationRatio;
|
||||||
this.page = props.page ?? 1;
|
this.page = props.page;
|
||||||
this.perPage = props.perPage ?? 10;
|
this.perPage = props.perPage;
|
||||||
this.originWaypoint = this.waypoints.filter(
|
this.originWaypoint = this.waypoints.filter(
|
||||||
(waypoint: Waypoint) => waypoint.position == 0,
|
(waypoint: Waypoint) => waypoint.position == 0,
|
||||||
)[0];
|
)[0];
|
||||||
|
@ -124,6 +124,12 @@ export class MatchQuery extends QueryBase {
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
setDefaultPagination = (defaultPagination: DefaultPagination): MatchQuery => {
|
||||||
|
if (!this.page) this.page = defaultPagination.page;
|
||||||
|
if (!this.perPage) this.perPage = defaultPagination.perPage;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
setDatesAndSchedule = (
|
setDatesAndSchedule = (
|
||||||
datetimeTransformer: DateTimeTransformerPort,
|
datetimeTransformer: DateTimeTransformerPort,
|
||||||
): MatchQuery => {
|
): MatchQuery => {
|
||||||
|
@ -243,3 +249,8 @@ interface DefaultAlgorithmParameters {
|
||||||
maxDetourDistanceRatio: number;
|
maxDetourDistanceRatio: number;
|
||||||
maxDetourDurationRatio: number;
|
maxDetourDurationRatio: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface DefaultPagination {
|
||||||
|
page: number;
|
||||||
|
perPage: number;
|
||||||
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ const USE_AZIMUTH = true;
|
||||||
const AZIMUTH_MARGIN = 10;
|
const AZIMUTH_MARGIN = 10;
|
||||||
const MAX_DETOUR_DISTANCE_RATIO = 0.3;
|
const MAX_DETOUR_DISTANCE_RATIO = 0.3;
|
||||||
const MAX_DETOUR_DURATION_RATIO = 0.3;
|
const MAX_DETOUR_DURATION_RATIO = 0.3;
|
||||||
|
const PER_PAGE = 10;
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class DefaultParamsProvider implements DefaultParamsProviderPort {
|
export class DefaultParamsProvider implements DefaultParamsProviderPort {
|
||||||
|
@ -81,5 +82,9 @@ export class DefaultParamsProvider implements DefaultParamsProviderPort {
|
||||||
this._configService.get('MAX_DETOUR_DURATION_RATIO') as string,
|
this._configService.get('MAX_DETOUR_DURATION_RATIO') as string,
|
||||||
)
|
)
|
||||||
: MAX_DETOUR_DURATION_RATIO,
|
: MAX_DETOUR_DURATION_RATIO,
|
||||||
|
PER_PAGE:
|
||||||
|
this._configService.get('PER_PAGE') !== undefined
|
||||||
|
? parseInt(this._configService.get('PER_PAGE') as string)
|
||||||
|
: PER_PAGE,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,7 @@ const mockDefaultParamsProvider: DefaultParamsProviderPort = {
|
||||||
AZIMUTH_MARGIN: 10,
|
AZIMUTH_MARGIN: 10,
|
||||||
MAX_DETOUR_DISTANCE_RATIO: 0.3,
|
MAX_DETOUR_DISTANCE_RATIO: 0.3,
|
||||||
MAX_DETOUR_DURATION_RATIO: 0.3,
|
MAX_DETOUR_DURATION_RATIO: 0.3,
|
||||||
|
PER_PAGE: 10,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -49,6 +49,7 @@ const defaultParams: DefaultParams = {
|
||||||
AZIMUTH_MARGIN: 10,
|
AZIMUTH_MARGIN: 10,
|
||||||
MAX_DETOUR_DISTANCE_RATIO: 0.3,
|
MAX_DETOUR_DISTANCE_RATIO: 0.3,
|
||||||
MAX_DETOUR_DURATION_RATIO: 0.3,
|
MAX_DETOUR_DURATION_RATIO: 0.3,
|
||||||
|
PER_PAGE: 10,
|
||||||
};
|
};
|
||||||
|
|
||||||
const mockInputDateTimeTransformer: DateTimeTransformerPort = {
|
const mockInputDateTimeTransformer: DateTimeTransformerPort = {
|
||||||
|
|
|
@ -34,6 +34,8 @@ const mockConfigServiceWithDefaults = {
|
||||||
return 0.5;
|
return 0.5;
|
||||||
case 'MAX_DETOUR_DURATION_RATIO':
|
case 'MAX_DETOUR_DURATION_RATIO':
|
||||||
return 0.6;
|
return 0.6;
|
||||||
|
case 'PER_PAGE':
|
||||||
|
return 15;
|
||||||
default:
|
default:
|
||||||
return 'some_default_value';
|
return 'some_default_value';
|
||||||
}
|
}
|
||||||
|
@ -96,6 +98,7 @@ describe('DefaultParamsProvider', () => {
|
||||||
expect(params.AZIMUTH_MARGIN).toBe(15);
|
expect(params.AZIMUTH_MARGIN).toBe(15);
|
||||||
expect(params.MAX_DETOUR_DISTANCE_RATIO).toBe(0.5);
|
expect(params.MAX_DETOUR_DISTANCE_RATIO).toBe(0.5);
|
||||||
expect(params.MAX_DETOUR_DURATION_RATIO).toBe(0.6);
|
expect(params.MAX_DETOUR_DURATION_RATIO).toBe(0.6);
|
||||||
|
expect(params.PER_PAGE).toBe(15);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should provide default params if defaults are not set', async () => {
|
it('should provide default params if defaults are not set', async () => {
|
||||||
|
@ -113,5 +116,6 @@ describe('DefaultParamsProvider', () => {
|
||||||
expect(params.AZIMUTH_MARGIN).toBe(10);
|
expect(params.AZIMUTH_MARGIN).toBe(10);
|
||||||
expect(params.MAX_DETOUR_DISTANCE_RATIO).toBe(0.3);
|
expect(params.MAX_DETOUR_DISTANCE_RATIO).toBe(0.3);
|
||||||
expect(params.MAX_DETOUR_DURATION_RATIO).toBe(0.3);
|
expect(params.MAX_DETOUR_DURATION_RATIO).toBe(0.3);
|
||||||
|
expect(params.PER_PAGE).toBe(10);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -29,6 +29,7 @@ const mockDefaultParamsProvider: DefaultParamsProviderPort = {
|
||||||
AZIMUTH_MARGIN: 10,
|
AZIMUTH_MARGIN: 10,
|
||||||
MAX_DETOUR_DISTANCE_RATIO: 0.3,
|
MAX_DETOUR_DISTANCE_RATIO: 0.3,
|
||||||
MAX_DETOUR_DURATION_RATIO: 0.3,
|
MAX_DETOUR_DURATION_RATIO: 0.3,
|
||||||
|
PER_PAGE: 10,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -29,6 +29,7 @@ const mockDefaultParamsProvider: DefaultParamsProviderPort = {
|
||||||
AZIMUTH_MARGIN: 10,
|
AZIMUTH_MARGIN: 10,
|
||||||
MAX_DETOUR_DISTANCE_RATIO: 0.3,
|
MAX_DETOUR_DISTANCE_RATIO: 0.3,
|
||||||
MAX_DETOUR_DURATION_RATIO: 0.3,
|
MAX_DETOUR_DURATION_RATIO: 0.3,
|
||||||
|
PER_PAGE: 10,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue