fix(travel.js): fix Ulys API parsing issues and ID extraction
This commit is contained in:
@@ -125,11 +125,18 @@ async function getUlysRate(vehicleCategory, passages) {
|
|||||||
);
|
);
|
||||||
const data = res.data;
|
const data = res.data;
|
||||||
if (Array.isArray(data) && data.length > 0) {
|
if (Array.isArray(data) && data.length > 0) {
|
||||||
// Système fermé : 1 réponse avec entranceToll + exitToll
|
if (passages.length === 2) {
|
||||||
if (data.length === 1 && data[0].price > 0) return data[0].price;
|
// We expect a single closed system response
|
||||||
// Système ouvert (barrières individuelles) : sommer les prix
|
if (data.length === 1 && data[0].entranceToll && data[0].exitToll && data[0].price > 0) {
|
||||||
const total = data.reduce((sum, d) => sum + (d.price || 0), 0);
|
return data[0].price;
|
||||||
return total > 0 ? total : null;
|
}
|
||||||
|
return null;
|
||||||
|
} else if (passages.length === 1) {
|
||||||
|
if (data.length === 1 && data[0].price > 0) {
|
||||||
|
return data[0].price;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -144,16 +151,17 @@ async function calculateTollCost(encodedPolyline, vehicleCategory) {
|
|||||||
try {
|
try {
|
||||||
// 1. Demander à Ulys les gares sur le tracé
|
// 1. Demander à Ulys les gares sur le tracé
|
||||||
const legsData = await getUlysTollLegs(encodedPolyline);
|
const legsData = await getUlysTollLegs(encodedPolyline);
|
||||||
|
const features = Array.isArray(legsData) ? legsData : (legsData && legsData.features ? legsData.features : []);
|
||||||
|
|
||||||
if (legsData && Array.isArray(legsData.features) && legsData.features.length > 0) {
|
if (features && features.length > 0) {
|
||||||
// Extraire les gares dans l'ordre du tracé
|
// Extraire les gares dans l'ordre du tracé
|
||||||
const tollGates = [];
|
const tollGates = [];
|
||||||
for (const feature of legsData.features) {
|
for (const feature of features) {
|
||||||
const props = feature.properties || {};
|
const props = feature.properties || feature.Placemark || feature.placemark || {};
|
||||||
|
|
||||||
// La réponse Ulys peut utiliser différents noms de champs
|
// La réponse Ulys peut utiliser différents noms de champs
|
||||||
// On cherche l'identifiant de la gare dans tous les champs connus
|
// On cherche l'identifiant de la gare dans tous les champs connus
|
||||||
const id =
|
let id =
|
||||||
props.id_gare ||
|
props.id_gare ||
|
||||||
props.idGare ||
|
props.idGare ||
|
||||||
props.id ||
|
props.id ||
|
||||||
@@ -161,6 +169,10 @@ async function calculateTollCost(encodedPolyline, vehicleCategory) {
|
|||||||
props.gare_id ||
|
props.gare_id ||
|
||||||
props.tollStationId;
|
props.tollStationId;
|
||||||
|
|
||||||
|
if (!id && props.Code) {
|
||||||
|
id = props.Code.split('_')[0];
|
||||||
|
}
|
||||||
|
|
||||||
if (!id) continue;
|
if (!id) continue;
|
||||||
const idStr = String(id);
|
const idStr = String(id);
|
||||||
if (idStr.length < 5) continue;
|
if (idStr.length < 5) continue;
|
||||||
@@ -304,6 +316,9 @@ exports.googleMapsComputeRoute = async (req, res) => {
|
|||||||
|
|
||||||
const routes = [];
|
const routes = [];
|
||||||
|
|
||||||
|
console.log("resToll.data.routes length:", resToll.data.routes ? resToll.data.routes.length : 0);
|
||||||
|
if (!resToll.data.routes) console.log("resToll.data:", JSON.stringify(resToll.data, null, 2));
|
||||||
|
|
||||||
// --- Route avec péage ---
|
// --- Route avec péage ---
|
||||||
if (resToll.data.routes && resToll.data.routes.length > 0) {
|
if (resToll.data.routes && resToll.data.routes.length > 0) {
|
||||||
const r = resToll.data.routes[0];
|
const r = resToll.data.routes[0];
|
||||||
|
|||||||
Reference in New Issue
Block a user