Created
August 13, 2022 22:07
-
-
Save all12jus/6448452588319703589a1fa0b10185d7 to your computer and use it in GitHub Desktop.
Vehicle.ts
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
/// npx ts-node src/foo.ts | |
// npm install -g ts-node typescript '@types/node' | |
// ts-node typescript-file.ts | |
import express from 'express'; | |
import bodyParser from 'body-parser'; | |
import mongoose, {ConnectOptions} from 'mongoose'; | |
const app = express(); | |
class Vehicle { | |
constructor( | |
public make: string, | |
public model: string, | |
public year: number, | |
public vin: string, | |
public mileage: number, | |
public plate: string | |
) {} | |
} | |
// make schema based on Vehicle class | |
const vehicleSchema = new mongoose.Schema({ | |
make: String, | |
model: String, | |
year: Number, | |
vin: String, | |
mileage: Number, | |
plate: String | |
}); | |
const VehicleModel = mongoose.model('Vehicle', vehicleSchema); | |
app.use(bodyParser.json()); | |
app.use(bodyParser.urlencoded({ extended: true })); | |
let sampleVehicles: Vehicle[] = [ | |
new Vehicle('Toyota', 'Corolla', 2015, '123456789', 0, 'ABC123'), | |
new Vehicle('Honda', 'Civic', 2017, '123456789', 0, 'ABC123'), | |
new Vehicle('Ford', 'Focus', 2018, '123456789', 0, 'ABC123'), | |
new Vehicle('Chevrolet', 'Camaro', 2019, '123456789', 0, 'ABC123'), | |
new Vehicle('Nissan', 'Sentra', 2020, '123456789', 0, 'ABC123'), | |
new Vehicle('Ford', 'Mustang', 2021, '123456789', 0, 'ABC123'), | |
new Vehicle('Toyota', 'Prius', 2022, '123456789', 0, 'ABC123'), | |
new Vehicle('Honda', 'CRV', 2023, '123456789', 0, 'ABC123'), | |
]; | |
// route to get all vehicles from the database | |
app.get('/vehicles', (req, res) => { | |
VehicleModel.find((err, vehicles) => { | |
if (err) { | |
res.send(err); | |
} else { | |
res.send(vehicles); | |
} | |
}).sort({_id: -1}); | |
}); | |
// route to add a new vehicle to the database | |
app.post('/vehicles', (req, res) => { | |
const newVehicle = new VehicleModel({...req.body, _id: new mongoose.Types.ObjectId()}); | |
// newVehicle._id = new mongoose.Types.ObjectId(); | |
newVehicle.save((err, vehicle) => { | |
if (err) { | |
console.error("Error saving vehicle: ", err); | |
res.status(400).send(err); | |
} else { | |
res.send(vehicle); | |
} | |
}); | |
}); | |
// route to update a vehicle in the database | |
app.put('/vehicles/:id', (req, res) => { | |
VehicleModel.findByIdAndUpdate(req.params.id, req.body, (err, vehicle) => { | |
if (err) { | |
res.send(err); | |
} else { | |
res.send(vehicle); | |
} | |
}); | |
}); | |
// delete vehicle from the database | |
app.delete('/vehicles/:id', (req, res) => { | |
VehicleModel.findByIdAndRemove(req.params.id, (err, vehicle) => { | |
if (err) { | |
res.send(err); | |
} else { | |
res.send(vehicle); | |
} | |
}); | |
}); | |
mongoose.connect(process.env.MONGO_URL || 'mongodb://localhost:27017/vehicles', { | |
useNewUrlParser: true, | |
useUnifiedTopology: true | |
} as ConnectOptions, function (databaseConnectionError) { | |
console.log(`DatabaseConnectionError ${databaseConnectionError}`) | |
if (databaseConnectionError === null){ | |
// count the number of vehicles in the database | |
VehicleModel.countDocuments((err, count) => { | |
if (err) { | |
console.log(err); | |
} | |
if (count === 0) { | |
// if there are no vehicles in the database, add the sample vehicles | |
VehicleModel.insertMany(sampleVehicles, (err, vehicles) => { | |
if (err) { | |
console.log(err); | |
} else { | |
console.log(`Added ${vehicles.length} vehicles to the database`); | |
} | |
}); | |
} | |
}); | |
app.listen(process.env.PORT, () => { | |
console.log(`Started: HTTP Listening on ${process.env.PORT}`); | |
}); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment