mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-07 23:35:42 +00:00
Update bookings.service.ts
This commit is contained in:
@@ -99,8 +99,8 @@ export class BookingsService {
|
|||||||
* findByIamUserId (the portal's own history) so the two can never disagree about
|
* findByIamUserId (the portal's own history) so the two can never disagree about
|
||||||
* what a phone number owns.
|
* what a phone number owns.
|
||||||
*
|
*
|
||||||
* Each sub-lookup is independently catch-and-warn: a phone match is a best-effort
|
* The IAM lookup is catch-and-warn: a phone match is a best-effort widening, and an
|
||||||
* widening, and one unavailable source must not fail the whole listing.
|
* unavailable IAM must not fail the whole listing.
|
||||||
*/
|
*/
|
||||||
private async buildPhoneOwnershipClauses(
|
private async buildPhoneOwnershipClauses(
|
||||||
variants: string[],
|
variants: string[],
|
||||||
@@ -126,47 +126,13 @@ export class BookingsService {
|
|||||||
})).map(p => p.id)
|
})).map(p => p.id)
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
// Guest bookings store phone in TravelerProfile.notes JSON (created for every guest
|
|
||||||
// booking). Catches cases where contactPhone was null but the profile recorded it.
|
|
||||||
const travelerRows = await this.dataSource
|
|
||||||
.query<{ passengerId: string }[]>(
|
|
||||||
`SELECT DISTINCT passenger_id AS "passengerId"
|
|
||||||
FROM passenger.traveler_profiles
|
|
||||||
WHERE notes IS NOT NULL
|
|
||||||
AND (notes::jsonb->>'phone') = ANY($1::text[])`,
|
|
||||||
[variants],
|
|
||||||
)
|
|
||||||
.catch((err: unknown) => {
|
|
||||||
this.logger.warn(`TravelerProfile phone lookup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
||||||
return [] as { passengerId: string }[];
|
|
||||||
});
|
|
||||||
|
|
||||||
// Guests who saved their profile (savePassengerDetails:true) have a
|
|
||||||
// SavedPassengerProfile row with phone + deviceId; guest bookings stash that
|
|
||||||
// deviceId in Booking.userAgent.
|
|
||||||
const savedProfileRows = await this.dataSource
|
|
||||||
.query<{ deviceId: string }[]>(
|
|
||||||
`SELECT DISTINCT device_id AS "deviceId"
|
|
||||||
FROM passenger.saved_passenger_profiles
|
|
||||||
WHERE phone = ANY($1::text[]) AND device_id IS NOT NULL`,
|
|
||||||
[variants],
|
|
||||||
)
|
|
||||||
.catch((err: unknown) => {
|
|
||||||
this.logger.warn(`SavedPassengerProfile phone lookup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
||||||
return [] as { deviceId: string }[];
|
|
||||||
});
|
|
||||||
|
|
||||||
const allPassengerIds = [...new Set([...iamPassengerIds, ...travelerRows.map(r => r.passengerId)])];
|
|
||||||
const guestDeviceIds = savedProfileRows.map(r => r.deviceId);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
clauses: [
|
clauses: [
|
||||||
{ contactPhone: { in: variants } },
|
{ contactPhone: { in: variants } },
|
||||||
{ passenger: { user: { phone: { in: variants } } } },
|
{ passenger: { user: { phone: { in: variants } } } },
|
||||||
...(allPassengerIds.length > 0 ? [{ passengerId: { in: allPassengerIds } }] : []),
|
...(iamPassengerIds.length > 0 ? [{ passengerId: { in: iamPassengerIds } }] : []),
|
||||||
...(guestDeviceIds.length > 0 ? [{ userAgent: { in: guestDeviceIds } }] : []),
|
|
||||||
],
|
],
|
||||||
passengerIds: allPassengerIds,
|
passengerIds: iamPassengerIds,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user