From 9e37c217935b4e32fe6a6a161d646caa5e31e5ef Mon Sep 17 00:00:00 2001 From: nmrgt Date: Tue, 14 Jan 2025 17:32:28 +0000 Subject: [PATCH] Fix: api journey (#2749) * fix: return 422 if version >=3.1 * fix: avoid journey without phone and phone_trunc * fix: return legacy_id --- .../carpool/providers/CarpoolStatusService.ts | 5 ++--- .../acquisition/actions/CreateJourneyAction.ts | 17 ++++++++++++++++- .../acquisition/actions/StatusJourneyAction.ts | 7 +++++++ .../acquisition/contracts/status.contract.ts | 1 + 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/api/src/pdc/providers/carpool/providers/CarpoolStatusService.ts b/api/src/pdc/providers/carpool/providers/CarpoolStatusService.ts index 0321d14e0..4871c5d36 100644 --- a/api/src/pdc/providers/carpool/providers/CarpoolStatusService.ts +++ b/api/src/pdc/providers/carpool/providers/CarpoolStatusService.ts @@ -1,4 +1,3 @@ -import { semver } from "@/deps.ts"; import { provider } from "@/ilos/common/Decorators.ts"; import { PostgresConnection } from "@/ilos/connection-postgres/index.ts"; import { CarpoolLabel, CarpoolStatus } from "../interfaces/database/label.ts"; @@ -24,7 +23,7 @@ export class CarpoolStatusService { anomaly: Array>; fraud: Array>; terms: Array>; - legacy_id?: number; + legacy_id: number; } | undefined > { const statusResult = await this.statusRepository @@ -58,7 +57,7 @@ export class CarpoolStatusService { anomaly, fraud, terms, - ...(semver.satisfies(semver.parse("3.2.0"), semver.parseRange(api_version)) ? { journey_id: legacy_id } : {}), + legacy_id, }; } diff --git a/api/src/pdc/services/acquisition/actions/CreateJourneyAction.ts b/api/src/pdc/services/acquisition/actions/CreateJourneyAction.ts index 8c8d5b5ee..9ecf840d7 100644 --- a/api/src/pdc/services/acquisition/actions/CreateJourneyAction.ts +++ b/api/src/pdc/services/acquisition/actions/CreateJourneyAction.ts @@ -63,11 +63,26 @@ export class CreateJourneyAction extends AbstractAction { if (end > now || start > end) { throw new ParseErrorException("Journeys cannot happen in the future"); } + + if ( + !journey.driver?.identity?.phone && + !journey.driver?.identity?.phone_trunc + ) { + throw new InvalidRequestException(`driver.identity should have a phone or phone_trunc`); + } + if ( + !journey.passenger?.identity?.phone && + !journey.passenger?.identity?.phone_trunc + ) { + throw new InvalidRequestException(`passenger.identity should have a phone or phone_trunc`); + } } protected validateResults(context: ContextType, result: RegisterResponse): void { if (result.terms_violation_error_labels.length) { - if (semver.satisfies(semver.parse("3.1.0"), semver.parseRange(context.call?.api_version_range || "3.0"))) { + if ( + semver.rangeIntersects(semver.parseRange(">=3.1"), semver.parseRange(context.call?.api_version_range || "3.0")) + ) { throw new UnprocessableRequestException({ terms_violation_labels: result.terms_violation_error_labels, }); diff --git a/api/src/pdc/services/acquisition/actions/StatusJourneyAction.ts b/api/src/pdc/services/acquisition/actions/StatusJourneyAction.ts index 6d83bb6ff..0246341b1 100644 --- a/api/src/pdc/services/acquisition/actions/StatusJourneyAction.ts +++ b/api/src/pdc/services/acquisition/actions/StatusJourneyAction.ts @@ -2,6 +2,7 @@ import { ContextType, handler, NotFoundException } from "@/ilos/common/index.ts" import { Action as AbstractAction } from "@/ilos/core/index.ts"; import { copyGroupIdAndApplyGroupPermissionMiddlewares } from "@/pdc/providers/middleware/index.ts"; +import { semver } from "@/deps.ts"; import { castToStatusEnum } from "@/pdc/providers/carpool/helpers/castStatus.ts"; import { CarpoolStatusService } from "@/pdc/providers/carpool/providers/CarpoolStatusService.ts"; import { handlerConfig, ParamsInterface, ResultInterface } from "../contracts/status.contract.ts"; @@ -42,6 +43,12 @@ export class StatusJourneyAction extends AbstractAction { fraud_error_labels: result.fraud.map((f) => f.label), anomaly_error_details: result.anomaly as any, terms_violation_details: result.terms.map((f) => f.label), + ...(semver.rangeIntersects( + semver.parseRange(">=3.2"), + semver.parseRange(context.call?.api_version_range || "3.0"), + ) + ? { journey_id: result.legacy_id } + : {}), }; } } diff --git a/api/src/pdc/services/acquisition/contracts/status.contract.ts b/api/src/pdc/services/acquisition/contracts/status.contract.ts index b9d2adf53..cec3e2209 100644 --- a/api/src/pdc/services/acquisition/contracts/status.contract.ts +++ b/api/src/pdc/services/acquisition/contracts/status.contract.ts @@ -32,6 +32,7 @@ export interface ResultInterface { fraud_error_labels?: string[]; anomaly_error_details?: AnomalyErrorDetails[]; terms_violation_details?: string[]; + journey_id?: number; } export const handlerConfig = {