From 74261e3bda2848aab3383a20987ba1e0043dcf52 Mon Sep 17 00:00:00 2001 From: alberto perdomo Date: Mon, 17 May 2021 20:07:49 -0500 Subject: [PATCH 1/2] First commit --- src/app.js | 11 +++- src/controllers/api/category_controller.js | 73 ++++++++++++++++++++++ src/controllers/api/product_controller.js | 62 ++++++++++++++++++ src/db/mongo.js | 16 +++++ src/routes/api/categories.js | 14 +++++ src/routes/api/products.js | 13 ++++ 6 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 src/controllers/api/category_controller.js create mode 100644 src/controllers/api/product_controller.js create mode 100644 src/db/mongo.js create mode 100644 src/routes/api/categories.js create mode 100644 src/routes/api/products.js diff --git a/src/app.js b/src/app.js index 62a46b5e..47faa9a3 100644 --- a/src/app.js +++ b/src/app.js @@ -1,12 +1,21 @@ +//Routes +const products_api_router = require('./routes/api/products') +const categories_api_router = require('./routes/api/categories') + +//Variables const express = require('express'); const cors = require('cors'); +//App function function createApp() { const app = express(); app.use(cors()); app.use(express.json()); - // ADD YOUR ROUTES + //Products + app.use("/api/products", products_api_router) + //Categories + app.use("/api/categories", categories_api_router) return app; } diff --git a/src/controllers/api/category_controller.js b/src/controllers/api/category_controller.js new file mode 100644 index 00000000..7c125d0b --- /dev/null +++ b/src/controllers/api/category_controller.js @@ -0,0 +1,73 @@ +//Declaration of variables +const { ObjectId } = require('mongodb') +const mongo_client = require('../../db/mongo') +const collection = "categories" +const collection_products = "products" +const db_name = process.env.MONGO_DB_NAME + +//Controller settings +const controller = { + list: async (req, res) => { + await mongo_client.connect() + const database = mongo_client.db( db_name ) + const categories = database.collection( collection ) + + categories.find().toArray( (err, categories) => { + res.status(200).json(categories) + } ) + }, + show: async (req, res) => { + const { categoryId } = reg.params + await mongo_client.connect() + const database = mongo_client.db( db_name ) + const categories = database.collection( collection ) + + categories.findOne({ _id: ObjectId( categoryId ) }, (err, category) => { + res.status(200).json(category) + }) + }, + store: async (req, res) => { + await mongo_client.connect() + const database = mongo_client.db( db_name ) + const categories = database.collection( collection ) + + categories.insertOne({ ...req.body }, (err, category) => { + res.status(201).json(category.ops[0]) + }) + }, + update: async (req, res) => { + const { categoryId } = req.params + await mongo_client.connect() + const database = mongo_client.db( db_name ) + const categories = database.collection( collection ) + + categories.updateOne({ _id: ObjectId(categoryId) }, { $set: { ...req.body } }) + categories.findOne({ _id: ObjectId( categoryId ) }, (err, category) => { + res.status(200).json(category) + }) + }, + destroy: async (req, res) => { + const { categoryId } = req.params + await mongo_client.connect() + const database = mongo_client.db( db_name ) + const categories = database.collection( collection ) + + categories.deleteOne({ _id: ObjectId(categoryId) }, (err, categories) => { + if( categories.deletedCount === 1 ){ + res.status(200).json(true) + } + }) + }, + list_products: async (req, res) => { + const { categoryId } = req.params + await mongo_client.connect() + const database = mongo_client.db( db_name ) + const products = database.collection( collection_products ) + + products.find({ categoryId: categoryId }).toArray( (err, products) => { + res.status(200).json(products) + }) + } +} + +module.exports = controller \ No newline at end of file diff --git a/src/controllers/api/product_controller.js b/src/controllers/api/product_controller.js new file mode 100644 index 00000000..80eb6a0b --- /dev/null +++ b/src/controllers/api/product_controller.js @@ -0,0 +1,62 @@ +//Declaration of variables +const { ObjectId } = require('mongodb') +const mongo_client = require('../../db/mongo') +const collection = "products" +const db_name = process.env.MONGO_DB_NAME + +//Controller settings +const controller = { + list: async (req, res) => { + await mongo_client.connect() + database = mongo_client.db(db_name) + const products = database.collection(collection) + + products.find().toArray((err, products ) => { + res.status(200).json(products) + }) + }, + show: async (req, res) => { + const { productId } = req.params + await mongo_client.connect() + database = mongo_client.db(db_name) + const products = database.collection(collection) + + const product = await products.findOne({_id: ObjectId(productId)}) + + res.status(200).json(product) + }, + store: async (req, res) => { + await mongo_client.connect() + database = mongo_client.db(db_name) + const products = database.collection(collection) + + products.insertOne({ ...req.body }, (err, product) => { + res.status(201).json(product.ops[0]) + }) + }, + update: async (req, res) => { + const { productId } = req.params + await mongo_client.connect() + database = mongo_client.db(db_name) + const products = database.collection(collection) + + await products.updateOne({_id: ObjectId(productId)},{$set:{...req.body}}) + products.findOne({_id: ObjectId(productId)}, (err, product) => { + res.status(200).json(product) + }) + }, + destroy: async (req, res) => { + const { productId } = req.params + await mongo_client.connect() + database = mongo_client.db(db_name) + const products = database.collection(collection) + + products.deleteOne({ _id: ObjectId(productId) }, (err, deleted) => { + if(deleted.deletedCount === 1){ + res.status(200).json(true) + } + }) + } +} + +module.exports = controller \ No newline at end of file diff --git a/src/db/mongo.js b/src/db/mongo.js new file mode 100644 index 00000000..c750d49a --- /dev/null +++ b/src/db/mongo.js @@ -0,0 +1,16 @@ +//Declaration of db user settings +const { MongoClient, ObjectId } = require('mongodb') +const { config } = require('../config') + +const USER = encodeURIComponent(config.dbUser) +const PASSWORD = encodeURIComponent(config.dbPassword) + +//Declaration of db client settings +const MONGO_URI = `${config.dbConnection}://${USER}:${PASSWORD}@${config.dbHost}:${config.dbPort}?retryWrites=true&w=majority` + +const client = new MongoClient( MONGO_URI, { + useNewUrlParser: true, + useUnifiedTopology: true +} ) + +module.exports = client \ No newline at end of file diff --git a/src/routes/api/categories.js b/src/routes/api/categories.js new file mode 100644 index 00000000..9f4416bc --- /dev/null +++ b/src/routes/api/categories.js @@ -0,0 +1,14 @@ +//Declaration of variables +const express = require('express') +const router = express.Router() +const api_categories_controller = require('../../controllers/api/category_controller') + +//Router settings +router.get('/', api_categories_controller.list ) +router.get('/:categoryId', api_categories_controller.show ) +router.post('/', api_categories_controller.store ) +router.put('/:categoryId', api_categories_controller.update ) +router.delete('/:categoryId', api_categories_controller.destroy ) +router.get('/:categoryId/products', api_categories_controller.list_products ) + +module.exports = router \ No newline at end of file diff --git a/src/routes/api/products.js b/src/routes/api/products.js new file mode 100644 index 00000000..7ba09a72 --- /dev/null +++ b/src/routes/api/products.js @@ -0,0 +1,13 @@ +//Declaration of variables +const express = require('express') +const router = express.Router() +const api_products_controller = require('../../controllers/api/product_controller') + +//Router settings +router.get('/', api_products_controller.list ) +router.get('/:productId', api_products_controller.show ) +router.post('/', api_products_controller.store ) +router.put('/:productId', api_products_controller.update ) +router.delete('/:productId', api_products_controller.destroy ) + +module.exports = router From b68243618f69ae8b17941684fb0e731c9669c88c Mon Sep 17 00:00:00 2001 From: alberto perdomo Date: Mon, 17 May 2021 20:27:47 -0500 Subject: [PATCH 2/2] Second commit --- src/controllers/api/category_controller.js | 20 ++++++++++---------- src/controllers/api/product_controller.js | 16 ++++++++-------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/controllers/api/category_controller.js b/src/controllers/api/category_controller.js index 7c125d0b..5b0cb150 100644 --- a/src/controllers/api/category_controller.js +++ b/src/controllers/api/category_controller.js @@ -1,5 +1,5 @@ //Declaration of variables -const { ObjectId } = require('mongodb') +const { object_id } = require('mongodb') const mongo_client = require('../../db/mongo') const collection = "categories" const collection_products = "products" @@ -17,12 +17,12 @@ const controller = { } ) }, show: async (req, res) => { - const { categoryId } = reg.params + const { category_id } = reg.params await mongo_client.connect() const database = mongo_client.db( db_name ) const categories = database.collection( collection ) - categories.findOne({ _id: ObjectId( categoryId ) }, (err, category) => { + categories.findOne({ _id: object_id( category_id ) }, (err, category) => { res.status(200).json(category) }) }, @@ -36,35 +36,35 @@ const controller = { }) }, update: async (req, res) => { - const { categoryId } = req.params + const { category_id } = req.params await mongo_client.connect() const database = mongo_client.db( db_name ) const categories = database.collection( collection ) - categories.updateOne({ _id: ObjectId(categoryId) }, { $set: { ...req.body } }) - categories.findOne({ _id: ObjectId( categoryId ) }, (err, category) => { + categories.updateOne({ _id: object_id(category_id) }, { $set: { ...req.body } }) + categories.findOne({ _id: object_id( category_id ) }, (err, category) => { res.status(200).json(category) }) }, destroy: async (req, res) => { - const { categoryId } = req.params + const { category_id } = req.params await mongo_client.connect() const database = mongo_client.db( db_name ) const categories = database.collection( collection ) - categories.deleteOne({ _id: ObjectId(categoryId) }, (err, categories) => { + categories.deleteOne({ _id: object_id(category_id) }, (err, categories) => { if( categories.deletedCount === 1 ){ res.status(200).json(true) } }) }, list_products: async (req, res) => { - const { categoryId } = req.params + const { category_id } = req.params await mongo_client.connect() const database = mongo_client.db( db_name ) const products = database.collection( collection_products ) - products.find({ categoryId: categoryId }).toArray( (err, products) => { + products.find({ category_id: category_id }).toArray( (err, products) => { res.status(200).json(products) }) } diff --git a/src/controllers/api/product_controller.js b/src/controllers/api/product_controller.js index 80eb6a0b..206d3cec 100644 --- a/src/controllers/api/product_controller.js +++ b/src/controllers/api/product_controller.js @@ -1,5 +1,5 @@ //Declaration of variables -const { ObjectId } = require('mongodb') +const { object_id } = require('mongodb') const mongo_client = require('../../db/mongo') const collection = "products" const db_name = process.env.MONGO_DB_NAME @@ -16,12 +16,12 @@ const controller = { }) }, show: async (req, res) => { - const { productId } = req.params + const { product_id } = req.params await mongo_client.connect() database = mongo_client.db(db_name) const products = database.collection(collection) - const product = await products.findOne({_id: ObjectId(productId)}) + const product = await products.findOne({_id: object_id(product_id)}) res.status(200).json(product) }, @@ -35,23 +35,23 @@ const controller = { }) }, update: async (req, res) => { - const { productId } = req.params + const { product_id } = req.params await mongo_client.connect() database = mongo_client.db(db_name) const products = database.collection(collection) - await products.updateOne({_id: ObjectId(productId)},{$set:{...req.body}}) - products.findOne({_id: ObjectId(productId)}, (err, product) => { + await products.updateOne({_id: object_id(product_id)},{$set:{...req.body}}) + products.findOne({_id: object_id(product_id)}, (err, product) => { res.status(200).json(product) }) }, destroy: async (req, res) => { - const { productId } = req.params + const { product_id } = req.params await mongo_client.connect() database = mongo_client.db(db_name) const products = database.collection(collection) - products.deleteOne({ _id: ObjectId(productId) }, (err, deleted) => { + products.deleteOne({ _id: object_id(product_id) }, (err, deleted) => { if(deleted.deletedCount === 1){ res.status(200).json(true) }