From 0727c46f33f741e465712b0970d1a97b3644f88d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franco=20M=C3=A9ndez?= Date: Thu, 24 Oct 2019 01:27:57 -0300 Subject: [PATCH] feat(get_passenger_trips): add get trips as passenger function --- get_passenger_trips.js | 51 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 get_passenger_trips.js diff --git a/get_passenger_trips.js b/get_passenger_trips.js new file mode 100644 index 0000000..5f644ed --- /dev/null +++ b/get_passenger_trips.js @@ -0,0 +1,51 @@ +const aws = require('aws-sdk'); + +// eslint-disable-next-line import/no-absolute-path +const bearerToUserId = require('/opt/nodejs/bearer_to_user_id.js'); + +const dynamoDB = new aws.DynamoDB.DocumentClient(); + +async function getReservations(userId) { + const params = { + TableName: process.env.dynamodb_reservations_table_name, + IndexName: process.env.dynamodb_index_name, + KeyConditionExpression: 'passenger_id = :userId', + ExpressionAttributeValues: { + ':userId': userId + } + }; + const data = await dynamoDB.query(params).promise(); + return data.Items; +} + +async function getTrip(tripId) { + const params = { + TableName: process.env.dynamodb_trips_table_name, + Key: { + trip_id: tripId + }, + ProjectionExpression: 'trip_id, route_points, trip_status, etd' + }; + const data = await dynamoDB.get(params).promise(); + return data.Item; +} + +async function getTrips(reservations) { + return Promise.all( + reservations.slice(0, 15).map(async (r) => getTrip(r.trip_id)) + ); +} + +exports.handler = async (event) => { // eslint-disable-line no-unused-vars + const userId = await bearerToUserId.bearerToUserId(event.headers.Authorization.substring(7)); + + const reservations = await getReservations(userId); + const allPassengerTrips = await getTrips(reservations); + + const response = { + statusCode: 200, + headers: { 'Access-Control-Allow-Origin': '*' }, + body: JSON.stringify(allPassengerTrips) + }; + return response; +};