const express = require('express'); const mongoose = require('mongoose'); const app = express(); const cors = require('cors'); app.use(cors(), express.json()); const port = process.env.PORT || 5000; const MONGO_IP_ADDRESS = '192.168.100.102'; mongoose.connect(`mongodb://${MONGO_IP_ADDRESS}/storage`, {useNewUrlParser: true}); const db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function() { console.log(`connected to mongodb: ${MONGO_IP_ADDRESS}`); }); /*------------MODELS------------*/ //create schema var itemSchema = new mongoose.Schema({ id: String, name: String, description: String, quantity: Number }); var boxSchema = new mongoose.Schema({ id: String, name: String, description: String, item: [itemSchema], }); //compile schema into model var Box = mongoose.model('box', boxSchema, 'box'); var Item = mongoose.model('item', itemSchema, 'item'); /*------------/MODELS------------*/ /*------------CONTROLLER------------*/ app.listen(port, () => console.log(`Listening on port ${port}`)); // get all boxes app.get('/box', async (request, response) => { const boxes = await getAllBoxes(); response.send(boxes); }); // create box app.post('/box', async (request, response) => { await Box.create(request.body); const updatedBoxes = await getAllBoxes(); response.send(updatedBoxes); }); //edit box app.put('/box/:id', async (request, response) => { const id = request.params.id; await Box.updateOne({_id: id},{ $set: request.body}); const updatedBoxes = await getAllBoxes(); response.send(updatedBoxes); }); //delete box app.delete('/box/:id', async (request, response) => { await Box.deleteOne({_id: request.params.id}); const updatedBoxes = await getAllBoxes(); console.log(updatedBoxes); response.send(updatedBoxes); }); //create item app.post('/box/:id/item', async (request, response) => { const id = request.params.id; const query = {_id: id}; await Box.updateOne(query, { $push: { item: request.body } }); const updatedBox = await getBox(id); response.send(updatedBox); }); //edit item app.put('/box/:boxId/item/:itemId', async (request, response) => { const boxID = request.params.boxId; const itemID = request.params.itemId; await Box.updateOne({ 'item._id': itemID }, { $set: { item: request.body } }) const updatedBox = await getBox(boxID); response.send(updatedBox); }); //delete item app.delete('/box/:boxId/item/:itemId', async (request, response) => { const boxID = request.params.boxId; const itemID = request.params.itemId; await Box.update({ _id: boxID }, { $pull: { item: { _id: itemID } } }); const box = await getBox(boxID); response.send(box); }); /*------------/CONTROLLER------------*/ const getAllBoxes = async (queryParameters) => { queryParameters = queryParameters ?? {}; const data = await Box.find(queryParameters); return data; } const getBox = async (id) => { const data = await Box.findById(id); return data; }