Skip to content

Commit

Permalink
feat: 🎸 add nlb bus related api
Browse files Browse the repository at this point in the history
  • Loading branch information
yeukfei02 committed Feb 16, 2023
1 parent 71d94ae commit 1682e88
Show file tree
Hide file tree
Showing 7 changed files with 178 additions and 16 deletions.
18 changes: 11 additions & 7 deletions api/nlb/busArrivalTime.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,27 @@ const { getNlbRootUrl } = require("../../helper/helper");

const rootUrl = getNlbRootUrl();

module.exports.getBusArrivalTimeNlb = async (routeId, stopId) => {
let result = null;
module.exports.getBusArrivalTimeNlb = async (
busRouteId,
busStopId,
language
) => {
let busArrivalTime = null;

try {
const queryParams = new URLSearchParams({
action: "estimatedArrivals",
routeId,
stopId,
language: "zh",
routeId: busRouteId,
stopId: busStopId,
language: language || "zh",
});
const response = await fetch(`${rootUrl}/stop.php?${queryParams}`);
if (response) {
result = await response.json();
busArrivalTime = await response.json();
}
} catch (e) {
console.log("error = ", e);
}

return result;
return busArrivalTime;
};
23 changes: 23 additions & 0 deletions api/nlb/busRouteStop.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const fetch = require("node-fetch");
const { getNlbRootUrl } = require("../../helper/helper");

const rootUrl = getNlbRootUrl();

module.exports.getBusRouteStopByBusRouteIdNlb = async (busRouteId) => {
let busRouteStop = null;

try {
const queryParams = new URLSearchParams({
action: "list",
routeId: busRouteId,
});
const response = await fetch(`${rootUrl}/stop.php?${queryParams}`);
if (response) {
busRouteStop = await response.json();
}
} catch (e) {
console.log("error = ", e);
}

return busRouteStop;
};
30 changes: 30 additions & 0 deletions api/nlb/busStopArrivalTime.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const fetch = require("node-fetch");
const _ = require("lodash");
const { getNwfbOrCtbRootUrl } = require("../../helper/helper");

const rootUrl = getNwfbOrCtbRootUrl();

module.exports.getBusStopArrivalTimeNlb = async (stopId, language) => {
let result = null;

try {
const queryParams = new URLSearchParams({
lang: language || "zh-hant",
});
const response = await fetch(
`${rootUrl}/v1/transport/batch/stop-eta/NLB/${stopId}?${queryParams}`
);
if (response) {
result = await response.json();
}
} catch (e) {
console.log("error = ", e);
}

let finalResultList = [];
if (result && result.data) {
finalResultList = _.groupBy(result.data, "route");
}

return finalResultList;
};
16 changes: 16 additions & 0 deletions serverless.yml
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,14 @@ functions:
method: get
cors: true

nlbBusRouteStop:
handler: src/nlb/busRouteStop/handler.busRouteStop
events:
- http:
path: /nlb/bus-route-stop
method: get
cors: true

nlbBusArrivalTime:
handler: src/nlb/busArrivalTime/handler.busArrivalTime
events:
Expand All @@ -244,5 +252,13 @@ functions:
method: get
cors: true

nlbBusStopArrivalTime:
handler: src/nlb/busStopArrivalTime/handler.busStopArrivalTime
events:
- http:
path: /nlb/bus-stop-arrival-time
method: get
cors: true

plugins:
- serverless-offline
20 changes: 11 additions & 9 deletions src/nlb/busArrivalTime/handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,32 @@ module.exports.busArrivalTime = async (event) => {
let response = {};

if (event.queryStringParameters) {
const { routeId, stopId } = event.queryStringParameters;
if (routeId && stopId) {
const getBusArrivalTimeNlbResult = await getBusArrivalTimeNlb(
routeId,
stopId
const { busRouteId, busStopId, language } = event.queryStringParameters;
if (busRouteId && busStopId && language) {
const getBusArrivalTimeResult = await getBusArrivalTimeNlb(
busRouteId,
busStopId,
language
);

let busArrivalTimeNlb = [];
if (getBusArrivalTimeNlbResult) {
busArrivalTimeNlb = getBusArrivalTimeNlbResult.estimatedArrivals;
if (getBusArrivalTimeResult) {
busArrivalTimeNlb = getBusArrivalTimeResult.estimatedArrivals;
}

response = {
statusCode: 200,
body: JSON.stringify({
message: "busArrivalTimeNlb",
message: "getBusArrivalTime",
busArrivalTimeNlb,
}),
};
} else {
response = {
statusCode: 400,
body: JSON.stringify({
message: "busArrivalTimeNlb error, no routeId and stopId",
message:
"getBusArrivalTime error, no busRouteId and busStopId and language",
}),
};
}
Expand Down
43 changes: 43 additions & 0 deletions src/nlb/busRouteStop/handler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const {
getBusRouteStopByBusRouteIdNlb,
} = require("../../../api/nlb/busRouteStop");

module.exports.busRouteStop = async (event) => {
console.log("### busRouteStop ###");
console.log("event.queryStringParameters = ", event.queryStringParameters);

let response = {};

if (event.queryStringParameters) {
const { busRouteId } = event.queryStringParameters;
if (busRouteId) {
const getBusRouteStopResult = await getBusRouteStopByBusRouteIdNlb(
busRouteId
);

let busRouteStopNlb = [];
if (getBusRouteStopResult) {
busRouteStopNlb = getBusRouteStopResult.stops;
}

response = {
statusCode: 200,
body: JSON.stringify({
message: "getBusRouteStop",
busRouteStopNlb,
}),
};
} else {
response = {
statusCode: 400,
body: JSON.stringify({
message: "getBusRouteStop error, no busRouteId",
}),
};
}
}

console.log("response = ", response);

return response;
};
44 changes: 44 additions & 0 deletions src/nlb/busStopArrivalTime/handler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
const {
getBusStopArrivalTimeNlb,
} = require("../../../api/nlb/busStopArrivalTime");

module.exports.busStopArrivalTime = async (event) => {
console.log("### busStopArrivalTime ###");
console.log("event.queryStringParameters = ", event.queryStringParameters);

let response = {};

if (event.queryStringParameters) {
const { stopId, language } = event.queryStringParameters;
if (stopId && language) {
const getBusStopArrivalTimeNlbResult = await getBusStopArrivalTimeNlb(
stopId,
language
);

let busStopArrivalTimeNlb = [];
if (getBusStopArrivalTimeNlbResult) {
busStopArrivalTimeNlb = getBusStopArrivalTimeNlbResult;
}

response = {
statusCode: 200,
body: JSON.stringify({
message: "busStopArrivalTimeNlb",
busStopArrivalTimeNlb,
}),
};
} else {
response = {
statusCode: 400,
body: JSON.stringify({
message: "busStopArrivalTimeNlb error, no stopId and language",
}),
};
}
}

console.log("response = ", response);

return response;
};

0 comments on commit 1682e88

Please sign in to comment.