Merge branch 'pause-ad' into 'next-release'
Draft: feat(pause ad): add first basic ad pause flag See merge request mobicoop/v3/service/matcher!48
This commit is contained in:
		
						commit
						96108ac873
					
				| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
-- AlterTable
 | 
			
		||||
ALTER TABLE "ad" ADD COLUMN     "pause" BOOLEAN NOT NULL DEFAULT false;
 | 
			
		||||
| 
						 | 
				
			
			@ -29,6 +29,7 @@ model Ad {
 | 
			
		|||
  passengerDuration Int?
 | 
			
		||||
  passengerDistance Int?
 | 
			
		||||
  waypoints         Unsupported("geography(LINESTRING)")?
 | 
			
		||||
  pause             Boolean                               @default(false)
 | 
			
		||||
  direction         Unsupported("geography(LINESTRING)")?
 | 
			
		||||
  fwdAzimuth        Int
 | 
			
		||||
  backAzimuth       Int
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,6 +52,7 @@ export class AdMapper
 | 
			
		|||
      seatsProposed: copy.seatsProposed,
 | 
			
		||||
      seatsRequested: copy.seatsRequested,
 | 
			
		||||
      strict: copy.strict,
 | 
			
		||||
      pause: copy.pause,
 | 
			
		||||
      driverDuration: copy.driverDuration,
 | 
			
		||||
      driverDistance: copy.driverDistance,
 | 
			
		||||
      passengerDuration: copy.passengerDuration,
 | 
			
		||||
| 
						 | 
				
			
			@ -100,6 +101,7 @@ export class AdMapper
 | 
			
		|||
        seatsProposed: record.seatsProposed,
 | 
			
		||||
        seatsRequested: record.seatsRequested,
 | 
			
		||||
        strict: record.strict,
 | 
			
		||||
        pause: record.pause,
 | 
			
		||||
        driverDuration: record.driverDuration,
 | 
			
		||||
        driverDistance: record.driverDistance,
 | 
			
		||||
        passengerDuration: record.passengerDuration,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,7 @@ export class CreateAdCommand extends Command implements UserAd {
 | 
			
		|||
  readonly seatsRequested: number;
 | 
			
		||||
  readonly strict: boolean;
 | 
			
		||||
  readonly waypoints: Address[];
 | 
			
		||||
  readonly pause: boolean;
 | 
			
		||||
 | 
			
		||||
  constructor(props: CommandProps<CreateAdCommand>) {
 | 
			
		||||
    super(props);
 | 
			
		||||
| 
						 | 
				
			
			@ -29,5 +30,6 @@ export class CreateAdCommand extends Command implements UserAd {
 | 
			
		|||
    this.seatsRequested = props.seatsRequested;
 | 
			
		||||
    this.strict = props.strict;
 | 
			
		||||
    this.waypoints = props.waypoints;
 | 
			
		||||
    this.pause = props.pause;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,6 +25,7 @@ export class MatchQuery extends QueryBase {
 | 
			
		|||
  seatsProposed?: number;
 | 
			
		||||
  seatsRequested?: number;
 | 
			
		||||
  strict?: boolean;
 | 
			
		||||
  pause?: boolean;
 | 
			
		||||
  readonly waypoints: Waypoint[];
 | 
			
		||||
  excludedAdId?: string;
 | 
			
		||||
  algorithmType?: AlgorithmType;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -143,6 +143,7 @@ export class PassengerOrientedSelector extends Selector {
 | 
			
		|||
 | 
			
		||||
  private _createWhere = (role: Role): string =>
 | 
			
		||||
    [
 | 
			
		||||
      this._wherePause(), // TODO where clause should be ordered for db index optimisation ...
 | 
			
		||||
      this._whereRole(role),
 | 
			
		||||
      this._whereStrict(),
 | 
			
		||||
      this._whereDate(role),
 | 
			
		||||
| 
						 | 
				
			
			@ -157,6 +158,8 @@ export class PassengerOrientedSelector extends Selector {
 | 
			
		|||
  private _whereRole = (role: Role): string =>
 | 
			
		||||
    role == Role.PASSENGER ? 'driver=True' : 'passenger=True';
 | 
			
		||||
 | 
			
		||||
  private _wherePause = (): string => 'pause=False'; // TODO: find if we want to add this as parameter/config or not
 | 
			
		||||
 | 
			
		||||
  private _whereStrict = (): string =>
 | 
			
		||||
    this.query.strict
 | 
			
		||||
      ? this.query.frequency == Frequency.PUNCTUAL
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,6 +81,7 @@ export class AdFactory {
 | 
			
		|||
      seatsProposed: ad.seatsProposed,
 | 
			
		||||
      seatsRequested: ad.seatsRequested,
 | 
			
		||||
      strict: ad.strict,
 | 
			
		||||
      pause: ad.pause,
 | 
			
		||||
      waypoints: ad.waypoints,
 | 
			
		||||
      points: points!,
 | 
			
		||||
      driverDistance,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,7 @@ export interface UserAd {
 | 
			
		|||
  seatsProposed: number;
 | 
			
		||||
  seatsRequested: number;
 | 
			
		||||
  strict: boolean;
 | 
			
		||||
  pause: boolean;
 | 
			
		||||
  waypoints: PointProps[];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -29,6 +30,7 @@ export interface AdProps {
 | 
			
		|||
  seatsProposed: number;
 | 
			
		||||
  seatsRequested: number;
 | 
			
		||||
  strict: boolean;
 | 
			
		||||
  pause: boolean;
 | 
			
		||||
  driverDuration?: number;
 | 
			
		||||
  driverDistance?: number;
 | 
			
		||||
  passengerDuration?: number;
 | 
			
		||||
| 
						 | 
				
			
			@ -51,6 +53,7 @@ export interface CreateAdProps {
 | 
			
		|||
  seatsProposed: number;
 | 
			
		||||
  seatsRequested: number;
 | 
			
		||||
  strict: boolean;
 | 
			
		||||
  pause: boolean;
 | 
			
		||||
  waypoints: PointProps[];
 | 
			
		||||
  driverDuration?: number;
 | 
			
		||||
  driverDistance?: number;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,7 @@ export type AdModel = {
 | 
			
		|||
  seatsProposed: number;
 | 
			
		||||
  seatsRequested: number;
 | 
			
		||||
  strict: boolean;
 | 
			
		||||
  pause: boolean;
 | 
			
		||||
  driverDuration?: number;
 | 
			
		||||
  driverDistance?: number;
 | 
			
		||||
  passengerDuration?: number;
 | 
			
		||||
| 
						 | 
				
			
			@ -158,6 +159,7 @@ export class AdRepository
 | 
			
		|||
        seatsProposed: ungroupedAd.seatsProposed,
 | 
			
		||||
        seatsRequested: ungroupedAd.seatsRequested,
 | 
			
		||||
        strict: ungroupedAd.strict,
 | 
			
		||||
        pause: ungroupedAd.pause,
 | 
			
		||||
        driverDuration: ungroupedAd.driverDuration,
 | 
			
		||||
        driverDistance: ungroupedAd.driverDistance,
 | 
			
		||||
        passengerDuration: ungroupedAd.passengerDuration,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,6 +32,7 @@ export class AdCreatedMessageHandler {
 | 
			
		|||
          seatsRequested: createdAd.seatsRequested,
 | 
			
		||||
          strict: createdAd.strict,
 | 
			
		||||
          waypoints: createdAd.waypoints,
 | 
			
		||||
          pause: createdAd.pause,
 | 
			
		||||
        }),
 | 
			
		||||
      );
 | 
			
		||||
    } catch (error: any) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,7 @@ export type Ad = AdReference & {
 | 
			
		|||
  seatsRequested: number;
 | 
			
		||||
  strict: boolean;
 | 
			
		||||
  waypoints: Waypoint[];
 | 
			
		||||
  pause: boolean;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export type ScheduleItem = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,6 +54,7 @@ function createAdPropsDefaults(): CreateAdProps {
 | 
			
		|||
    seatsProposed: 1,
 | 
			
		||||
    seatsRequested: 1,
 | 
			
		||||
    strict: false,
 | 
			
		||||
    pause: false,
 | 
			
		||||
    waypoints: [],
 | 
			
		||||
    points: [],
 | 
			
		||||
    driverDuration: 0,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,6 +37,7 @@ const adEntity: AdEntity = new AdEntity({
 | 
			
		|||
      },
 | 
			
		||||
    ],
 | 
			
		||||
    strict: false,
 | 
			
		||||
    pause: false,
 | 
			
		||||
    seatsProposed: 3,
 | 
			
		||||
    seatsRequested: 1,
 | 
			
		||||
    driverDistance: 350101,
 | 
			
		||||
| 
						 | 
				
			
			@ -89,6 +90,7 @@ const adReadModel: AdReadModel = {
 | 
			
		|||
  fwdAzimuth: 273,
 | 
			
		||||
  backAzimuth: 93,
 | 
			
		||||
  strict: false,
 | 
			
		||||
  pause: false,
 | 
			
		||||
  seatsProposed: 3,
 | 
			
		||||
  seatsRequested: 1,
 | 
			
		||||
  createdAt: now,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,6 +28,7 @@ export function createAdProps(): CreateAdProps {
 | 
			
		|||
    seatsProposed: 3,
 | 
			
		||||
    seatsRequested: 1,
 | 
			
		||||
    strict: false,
 | 
			
		||||
    pause: false,
 | 
			
		||||
    waypoints: [originPointProps, destinationPointProps],
 | 
			
		||||
    driverDistance: 23000,
 | 
			
		||||
    driverDuration: 900,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,6 +37,7 @@ const createAdProps: CreateAdProps = {
 | 
			
		|||
  seatsProposed: 3,
 | 
			
		||||
  seatsRequested: 1,
 | 
			
		||||
  strict: false,
 | 
			
		||||
  pause: false,
 | 
			
		||||
  frequency: Frequency.PUNCTUAL,
 | 
			
		||||
  waypoints: [originWaypoint, destinationWaypoint],
 | 
			
		||||
  driverDistance: 23000,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,6 +88,7 @@ const mockPrismaService = {
 | 
			
		|||
          seatsProposed: 3,
 | 
			
		||||
          seatsRequested: 1,
 | 
			
		||||
          strict: false,
 | 
			
		||||
          pause: false,
 | 
			
		||||
          driverDistance: 350000,
 | 
			
		||||
          driverDuration: 14400,
 | 
			
		||||
          passengerDistance: 350000,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue