-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #39 from dheffer/update-odometer&add-vehicle
Got update odometer and add vehicle working.
- Loading branch information
Showing
2 changed files
with
128 additions
and
58 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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 = "[email protected]" | ||
|
||
|
||
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); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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: "[email protected]", | ||
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 ( | ||
<div> | ||
<Card style={{width: '22rem'}} id={v.configurations.year+v.configurations.make+v.configurations.model}> | ||
<Card.Img variant="top" | ||
src="https://cdn.dealerk.it/cars/placeholder/placeholder-800.png"/> | ||
src={getPicture(v.configurations.config_id) || "https://cdn.dealerk.it/cars/placeholder/placeholder-800.png"}/> | ||
<Card.Body> | ||
<Card.Title className={'d-flex justify-content-center'}>{v.configurations.year} {v.configurations.make} {v.configurations.model}</Card.Title> | ||
<Card.Text className="d-flex justify-content-around"> | ||
|
@@ -87,7 +135,18 @@ function Vehicle(props) { | |
onChange={e => setOdometerValue(e.target.value)} | ||
/> | ||
</Form.Group> | ||
<Button variant="primary" onClick={handleUpdateOdometer}>Update Odometer</Button> | ||
<Button variant="primary" size="sm" onClick={handleUpdateOdometer}>Update Odometer</Button> | ||
</Card.Footer> | ||
<Card.Footer className="d-flex justify-content-around"> | ||
<Form.Group> | ||
<Form.Control | ||
type="text" | ||
placeholder="Enter a Picture URL" | ||
value={pictureUrl} | ||
onChange={e => setPictureUrl(e.target.value)} | ||
/> | ||
</Form.Group> | ||
<Button variant="primary" size="sm" onClick={handleUpdatePicture}>Update Picture</Button> | ||
</Card.Footer> | ||
</Card.Body> | ||
</Card> | ||
|