Skip to content

Instantly share code, notes, and snippets.

@all12jus
Created August 13, 2022 22:07
Show Gist options
  • Save all12jus/6448452588319703589a1fa0b10185d7 to your computer and use it in GitHub Desktop.
Save all12jus/6448452588319703589a1fa0b10185d7 to your computer and use it in GitHub Desktop.
Vehicle.ts
/// 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