diff --git a/backend/src/app.js b/backend/src/app.js index 54183c6..d37817d 100644 --- a/backend/src/app.js +++ b/backend/src/app.js @@ -286,12 +286,12 @@ app.delete('/api/delete-maintenance-history', async (req, res) => { */ app.get('/api/get-user-vehicles', async (req, res) => { const garage = DATABASE.collection("user_garage"); - const brandon = "johnson9713@gmail.com" + const vehicles = await garage.aggregate([ { $match: { - email: brandon + email: EMAIL } }, { @@ -333,17 +333,6 @@ app.delete('/api/delete-user-vehicle', async (req, res) => { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -app.get('/api/get-maintenance', async (req , res) => { - const message = DATABASE.collection("maintenance"); - - // const docObject = await message.findOne({ config_id: { $eq: 401988727} }); - - const docObject = await message.findOne({}); - await console.log(docObject.schedules[0].tasks); - res.send(docObject.message); -}) - - app.get('/api/get-config-id', async (req, res) => { const year = req.query.year; const make = req.query.make; @@ -507,18 +496,38 @@ app.post('/api/update-odometer', async (req, res) => { const userEmail = process.env.EMAIL; const odometer = req.body.odometer; const config_id = req.body.config_id; + const picture_url = req.body.picture_url; + + console.log("UPDATE BODY: "+JSON.stringify(req.body)); console.log("UPDATE ODOMETER: "+odometer); console.log("UPDATE config_id: "+config_id); console.log("UPDATE EMAIL: "+userEmail) + console.log("UPDATE PICTURE URL: "+picture_url) const database = client.db("vehicleDB"); const userVehicle = database.collection("user_vehicle_info"); - try{ + try{ + const updateFields = { email: userEmail, config_id: config_id}; + const updateData = {}; + console.log("IN TRY BLOCK") + + if(odometer !== undefined) { + console.log("ODOMETER DEFINED") + updateData.odometer = parseInt(odometer); + console.log("ODOMETER UPDATED") + } + if(picture_url !== undefined) { + console.log("PICTURE DEFINED") + updateData.picture_url = picture_url; + console.log("PICTURE UPDATED") + } + await userVehicle.updateOne( - { email: userEmail, vehicle_config_ids: config_id }, - { $set: { odometer: odometer }} + updateFields, + { $set: updateData } ); + console.log("ODOMETER/PICTURE UPDATED") return res.status(200).json({message: "Odometer updated"}); } catch(err) { @@ -528,11 +537,10 @@ app.post('/api/update-odometer', async (req, res) => { app.get('/api/get-user-vehicle-odometers', async (req, res) => { console.log("HIT GET USER VEHICLE ODOMETERS") - const userEmail = process.env.EMAIL; const database = client.db("vehicleDB"); const garage = database.collection("user_garage"); const userVehicle = database.collection("user_vehicle_info"); - const userGarage = await garage.findOne({email: userEmail}); + const userGarage = await garage.findOne({email: EMAIL}); if(!userGarage){ return res.status(404).json({message: "User not found"}); } @@ -541,35 +549,38 @@ app.get('/api/get-user-vehicle-odometers', async (req, res) => { if(!vehicleConfigIds){ return res.status(404).json({message: "User has no vehicles"}); } - console.log("VEHICLE CONFIG IDS in get ODOMETERS: "+vehicleConfigIds) const odometerReadings = await userVehicle.find( - {email: userEmail, vehicle_config_ids: {$in: vehicleConfigIds} }, - {_id: 0, vehicle_config_ids: 1, odometer: 1} + {email: EMAIL, config_id: {$in: vehicleConfigIds} }, + {_id: 0, undefined: 1, odometer: 1} ).toArray(); - console.log("ODOMETER READINGS: "+JSON.stringify(odometerReadings)) + const pictureReadings = await userVehicle.find( + {email: EMAIL, config_id: {$in: vehicleConfigIds} }, + {_id: 0, undefined: 1, picture_url: 1} + ).toArray(); const odometerMap = {}; odometerReadings.forEach(reading => { - odometerMap[reading.vehicle_config_ids] = reading.odometer; + odometerMap[reading.config_id] = reading.odometer; }); - console.log("ODOMETER MAP: "+JSON.stringify(odometerMap)) + const pictureMap = {}; + pictureReadings.forEach(reading => { + pictureMap[reading.config_id] = reading.picture_url; + }); const response = vehicleConfigIds.map(configId => ({ - vehicle_config_ids: configId, - odometer: odometerMap[configId]})); + config_id: configId, + odometer: odometerMap[configId], + picture_url: pictureMap[configId] + })); - console.log("RESPONSE: "+JSON.stringify(response)) - - response.forEach((item, index) => { - console.log(`${index + 1}. vehicle_config_ids: ${item.vehicle_config_ids}, odometer: ${item.odometer}`); - }) res.status(200).json(response); }); + //TODO: Request to get a list of all engines given a year, make, and model (Non-repeating). //TODO: Request to get a list of all transmissions given a year, make, model, and engine (Non-repeating). @@ -582,6 +593,6 @@ app.get('/api/get-user-vehicle-odometers', async (req, res) => { app.listen(port, () => { - console.log(`Predictive Vehicle Maintenance app listening on port ${port}`) + console.log(`Driveline app listening on port ${port}`) //console.log(mongo); }); \ No newline at end of file diff --git a/frontend/src/pages/garage/Vehicle.js b/frontend/src/pages/garage/Vehicle.js index 5c7a507..381f5b0 100644 --- a/frontend/src/pages/garage/Vehicle.js +++ b/frontend/src/pages/garage/Vehicle.js @@ -6,6 +6,8 @@ import {useEffect, useState} from "react"; function Vehicle(props) { const [odometerValue, setOdometerValue] = useState(0); const [odometerReading, setOdometerReading] = useState([]); + const [pictureUrl, setPictureUrl] = useState(""); + const email = process.env.EMAIL; useEffect(() => { fetchReadings(); @@ -16,6 +18,7 @@ function Vehicle(props) { const response = await fetch("/api/get-user-vehicle-odometers"); if(response.ok){ const data = await response.json(); + console.log("READINGS "+ JSON.stringify(data)); setOdometerReading(data); } else{ @@ -27,45 +30,90 @@ function Vehicle(props) { } } - const v = props.vehicle; + const handleUpdateOdometer = () => { console.log("Updating odometer"); - try{ - const response = fetch("/api/update-odometer", { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - vehicle_config_ids : v.configurations.config_id, - email: "johnson9713@gmail.com", - odometer: odometerValue - }) - }); - if(response.ok){ - console.log("Odometer updated"); + console.log(v.configurations.config_id+ "= config"); + console.log(odometerValue+ "= odometer"); + + const reqOptions = { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + config_id : v.configurations.config_id, + email: email, + odometer: odometerValue, + }), + redirect: 'follow' + }; + console.log("reqOptions " + reqOptions); + + fetch('/api/update-odometer', reqOptions) + .then(res => { + if (!res.ok) { + throw new Error('Network response was not ok'); + } + return res.json(); + }) + .then(data => { + console.log("Odometer Updated! "+data); fetchReadings(); - } - else{ - console.log("Odometer update failed"); - } - } - catch (e) { - console.error('There has been a problem with your fetch operation:', e); + setOdometerValue(0); + }) + .catch(error => { + console.error('There has been a problem with your fetch operation:', error); + }); } - } const getOdometer = (config) => { - const reading = odometerReading.find(vehicle => vehicle.vehicle_config_ids === config); + const reading = odometerReading.find(vehicle => vehicle.config_id === config); return reading ? reading.odometer : -9999; } + + const getPicture = (config) => { + const reading = odometerReading.find(vehicle => vehicle.config_id === config); + return reading ? reading.picture_url : "https://cdn.dealerk.it/cars/placeholder/placeholder-800.png"; + } + + + const handleUpdatePicture = () => { + const reqOptions = { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + config_id : v.configurations.config_id, + email: email, + picture_url: pictureUrl + }), + redirect: 'follow' + }; + fetch('/api/update-odometer', reqOptions) + .then(res => { + if (!res.ok) { + throw new Error('Network response was not ok'); + } + return res.json(); + }) + .then(data => { + console.log("Picture Updated! "+data); + pictureUrl = data.picture_url; + }) + .catch(error => { + console.error('There has been a problem with your fetch operation:', error); + }); + } + return (