Improve the driver search query to make use of the toDate index
This commit is contained in:
		
							parent
							
								
									e2beba299b
								
							
						
					
					
						commit
						35e8de4cfa
					
				| 
						 | 
					@ -179,6 +179,8 @@ export class PassengerOrientedSelector extends Selector {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private _maxFromDate = (role: Role): string => {
 | 
					  private _maxFromDate = (role: Role): string => {
 | 
				
			||||||
    if (role == Role.DRIVER) {
 | 
					    if (role == Role.DRIVER) {
 | 
				
			||||||
 | 
					      //When looking for a passenger, we add the duration of the driver route to the latest toDate
 | 
				
			||||||
 | 
					      //to compute the maximum sensible passenger fromDate, in case the pickup date could be on the next day
 | 
				
			||||||
      const querySchedule = this.query.schedule;
 | 
					      const querySchedule = this.query.schedule;
 | 
				
			||||||
      // When there is no schedule (search whole day), we consider the driver accepts to depart until 23:59
 | 
					      // When there is no schedule (search whole day), we consider the driver accepts to depart until 23:59
 | 
				
			||||||
      const maxScheduleTime =
 | 
					      const maxScheduleTime =
 | 
				
			||||||
| 
						 | 
					@ -201,26 +203,11 @@ export class PassengerOrientedSelector extends Selector {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private _minToDate = (role: Role): string => {
 | 
					  private _minToDate = (role: Role): string => {
 | 
				
			||||||
    if (role == Role.PASSENGER) {
 | 
					    if (role == Role.PASSENGER) {
 | 
				
			||||||
      const querySchedule = this.query.schedule;
 | 
					      // When looking for a driver, we look for a toDate that is one day before the fromDate of the query
 | 
				
			||||||
      // When there is no schedule (search whole day), we consider the passenger accepts to depart from 00:00
 | 
					      // so that the driver will be able to pick up the passenger even during a long trip that starts the day before
 | 
				
			||||||
      const minScheduleTime =
 | 
					      const oneDayBeforeFromDate = new Date(this.query.fromDate);
 | 
				
			||||||
        querySchedule === undefined
 | 
					      oneDayBeforeFromDate.setDate(oneDayBeforeFromDate.getDate() - 1);
 | 
				
			||||||
          ? '00:00'
 | 
					      return `'${oneDayBeforeFromDate.getUTCFullYear()}-${oneDayBeforeFromDate.getUTCMonth() + 1}-${oneDayBeforeFromDate.getUTCDate()}'`;
 | 
				
			||||||
          : querySchedule.reduce(
 | 
					 | 
				
			||||||
              (min, s) => (s.time < min ? s.time : min),
 | 
					 | 
				
			||||||
              '23:59',
 | 
					 | 
				
			||||||
            );
 | 
					 | 
				
			||||||
      const [h, m] = minScheduleTime.split(':');
 | 
					 | 
				
			||||||
      const minToDate = new Date(this.query.fromDate);
 | 
					 | 
				
			||||||
      minToDate.setHours(parseInt(h));
 | 
					 | 
				
			||||||
      minToDate.setMinutes(parseInt(m));
 | 
					 | 
				
			||||||
      return `(make_timestamp(\
 | 
					 | 
				
			||||||
        ${minToDate.getUTCFullYear()},\
 | 
					 | 
				
			||||||
        ${minToDate.getUTCMonth() + 1},\
 | 
					 | 
				
			||||||
        ${minToDate.getUTCDate()},\
 | 
					 | 
				
			||||||
        ${minToDate.getUTCHours()},\
 | 
					 | 
				
			||||||
        ${minToDate.getUTCMinutes()},0)\
 | 
					 | 
				
			||||||
        - concat("driverDuration", ' second')::interval)::date`;
 | 
					 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      return `'${this.query.fromDate}'`;
 | 
					      return `'${this.query.fromDate}'`;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue