diff --git a/src/modules/fare.js b/src/modules/fare.js index b2da72a5..58132763 100644 --- a/src/modules/fare.js +++ b/src/modules/fare.js @@ -60,7 +60,7 @@ const initializeDatabase = async () => { { fare: true } ) .lean() - ).fare; + )?.fare; const fare = prevTaxiFare ? prevTaxiFare : await callTaxiFare(from, to); @@ -145,22 +145,12 @@ const updateTaxiFare = async (sTime, isMajor) => { const to = await locationModel.findOne({ _id: item.to }); await acc; - await callTaxiFare - .catch((err) => { - logger.error(err.message); - }) + await callTaxiFare(from, to) .then(async (fare) => { if (fare) { await taxiFareModel.updateOne( { from: item.from, to: item.to, time: sTime }, - { fare: fare }, - (err, docs) => { - if (err) - logger.error( - "Error occured while updating Taxi Fare document: " + - err.message - ); - } + { fare: fare } ); } }) @@ -189,12 +179,7 @@ const callTaxiFare = async (from, to) => { } return ( await axios.get( - `${ - "https://naveropenapi.apigw.ntruss.com/map-direction/v1/driving?start=" + - from.longitude + - "," + - from.latitude - }&goal=${to.longitude + "," + to.latitude}&options=traoptimal`, + `https://naveropenapi.apigw.ntruss.com/map-direction/v1/driving?start=${from.longitude},${from.latitude}}&goal=${to.longitude},${to.latitude}&options=traoptimal`, { headers: naverMapApi } ) ).data.route.traoptimal[0].summary.taxiFare; diff --git a/src/sampleGenerator/sampleData.json b/src/sampleGenerator/sampleData.json index 546812cd..b2e84816 100644 --- a/src/sampleGenerator/sampleData.json +++ b/src/sampleGenerator/sampleData.json @@ -45,8 +45,8 @@ { "koName": "대전복합터미널", "enName": "Daejeon Terminal Complex", - "longitude": 127.350161, - "latitude": 36.362785 + "longitude": 127.436880, + "latitude": 36.349766 }, { "koName": "만년중학교", diff --git a/src/services/fare.js b/src/services/fare.js index 55d1ad33..d2bdca5b 100644 --- a/src/services/fare.js +++ b/src/services/fare.js @@ -24,11 +24,11 @@ const getTaxiFareHandler = async (req, res) => { naverMapApi["X-NCP-APIGW-API-KEY"] === false || naverMapApi["X-NCP-APIGW-API-KEY-ID"] === false ) { - res.status(503).json({ + return res.status(503).json({ error: "fare/getTaxiFareHandler: Naver Map API credential not found", }); - return; } + const from = await locationModel .findOne({ _id: { $eq: req.query.from }, @@ -40,46 +40,21 @@ const getTaxiFareHandler = async (req, res) => { const sTime = scaledTime(new Date(req.query.time)); if (!from || !to) { - res + return res .status(400) .json({ error: "fare/getTaxiFareHandler: Wrong location" }); - return; + } else if (req.query.from === req.query.to) { + // 프론트엔드에서 예상 택시비를 숨기기 위해 0원을 반환 + return res.status(200).json({ fare: 0 }); } - const isMajor = ( - await taxiFareModel - .findOne( - { from: from._id, to: to._id, time: 0 }, - { isMajor: true }, - (err, docs) => { - if (err) - logger.error( - "Error occured while finding Taxi Fare documents: " + - err.message - ); - } - ) - .lean() - ).isMajor; - // 시간대별 정보 관리 (현재: 카이스트 본원 <-> 대전역) - if (isMajor) { - const taxiFare = await taxiFareModel - .findOne( - { - from: from._id, - to: to._id, - time: sTime, - }, - (err, docs) => { - if (err) - logger.error( - "Error occured while finding Taxi Fare documents: " + - err.message - ); - } - ) - .lean(); + + const fare = await taxiFareModel + .findOne({ from: from._id, to: to._id, time: sTime }) + .lean(); + // 해당 sTime 대로 값이 존재하는 경우 (현재: 카이스트 본원 <-> 대전역) + if (fare) { //만일 초기화 되지 않은 시간대의 정보를 필요로하는 비상시의 경우 대비 - if (!taxiFare || taxiFare.fare <= 0) { + if (fare.fare <= 0) { await callTaxiFare(from, to) .then((fare) => { res.status(200).json({ fare: fare }); @@ -88,27 +63,19 @@ const getTaxiFareHandler = async (req, res) => { logger.error(err.message); }); } else { - res.status(200).json({ fare: taxiFare.fare }); + res.status(200).json({ fare: fare.fare }); } } else { - const taxiFare = await taxiFareModel - .findOne( - { - from: from._id, - to: to._id, - time: 0, - }, - (err, docs) => { - if (err) - logger.error( - "Error occured while finding Taxi Fare documents: " + - err.message - ); - } - ) + const minorTaxiFare = await taxiFareModel + .findOne({ + from: from._id, + to: to._id, + time: 48 * new Date(req.query.time).getDay() + 0, + }) .lean(); + //만일 초기화 되지 않은 시간대의 정보를 필요로하는 비상시의 경우 대비 - if (!taxiFare || taxiFare.fare <= 0) { + if (!minorTaxiFare || minorTaxiFare.fare <= 0) { await callTaxiFare(from, to) .then((fare) => { res.status(200).json({ fare: fare }); @@ -117,7 +84,7 @@ const getTaxiFareHandler = async (req, res) => { logger.error(err.message); }); } else { - res.status(200).json({ fare: taxiFare.fare }); + res.status(200).json({ fare: minorTaxiFare.fare }); } } } catch (err) {