Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions .env-example

This file was deleted.

9,898 changes: 130 additions & 9,768 deletions package-lock.json

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"mongodb": "^3.6.6"
"mongodb": "^3.6.6",
"mongoose": "^5.12.12"
},
"devDependencies": {
"jest": "^26.6.3",
Expand Down
6 changes: 6 additions & 0 deletions src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ function createApp() {
app.use(express.json());

// ADD YOUR ROUTES
const category = require('./routes/category');
app.use(category);

const product = require('./routes/product');
app.use(product);

return app;
}

Expand Down
16 changes: 16 additions & 0 deletions src/config/db.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const mongoose = require('mongoose');
//url mongo atlas
const urldb = `mongodb+srv://${process.env.MONGO_USER}:${process.env.MONGO_PASSWORD}@${process.env.MONGO_HOST}/${process.env.MONGO_DB_NAME}`;
mongoose.connect(urldb,{
useNewUrlParser: true,
useUnifiedTopology: true
});

const connection = mongoose.connection;

connection.on('error',console.error.bind(console),'Error al conectar MongoDb');
connection.once('open', function() {
console.log('Conexion a Base de datos OK');
});

module.exports = connection;
122 changes: 122 additions & 0 deletions src/controllers/categoryController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
//importamos model
const Category = require('../models/Category');
const Product = require('../models/Product');
//LISTA DE CATEGORIAS -> GET
module.exports.show = (req,res)=>{
Category.find({},(error,categories)=>{
if(error){
return res.status(500).json({
message: 'Error al obtener categorias'
});
}
//Ok
console.log('ok');
console.log(categories);
return res.status(200).json({
categories
});
});
}
//RETORNAR CATEGORIA -> GET
module.exports.search = (req,res)=>{
const id = req.params.id ;
console.log('search',id);

Category.findById(id,(error, category) =>{
if(error){
return res.status(404).json({
message: 'Categoria no encontrada'
})
}
//res.redirect('/')
//ok
return res.status(200).json({
category
});
});
};

//CREAR CATEGORIA -> POST
module.exports.create = (req,res)=>{
console.log('create--');
console.log(req.body);

const category = new Category({
name: req.body.name,
image: req.body.image
})
category.save((error,category) => {
if(error){
return res.status(500).json({
message: 'Error al crear la categoria'
})
}
//res.redirect('/')
//ok
return res.status(200).json({
message: 'Categoria creada con exito'
});
})
};

//MODIFICAR CATEGORIA -> PUT
module.exports.update = (req,res)=>{
const id = req.params.id;
const name = req.body.name;
const image = req.body.image;

console.log('update');
console.log(id);
console.log(name);
console.log(image);

//encontrar categoria
Category.findByIdAndUpdate(id,{
name,
image
},(error,category) => {
if(error){
return res.status(500).json({
message: 'Error al modificar categoria'
})
}
//ok
return res.status(200).json({
message: 'Categoria modificada con exito'
});
});
};

//ELIMINAR CATEGORIA -> DELETE
module.exports.delete = (req,res)=>{
const id = req.params.id;
Category.findByIdAndDelete(id,(error, category) =>{
if(error){
return res.status(500).json({
message: 'Error al eliminar categoria'
})
}
//ok
return res.status(200).json({
message: 'Categoria eliminada con exito'
});
});
};

//PRODUCTO DE CATEGORIA -> GET
module.exports.products = (req,res)=>{
const id = req.params.id;
Product.find().where('categoryId','==',id).exec((error,productos)=>{
if(error){
return res.status(404).json({
message: 'Productos no encontrados'
})
}
console.log('resultados');
console.log(productos);
return res.status(200).json({
productos
});

});
};
111 changes: 111 additions & 0 deletions src/controllers/productController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
//importamos model
const Product = require('../models/Product');

//LISTA DE PRODUCTOS -> GET
module.exports.show = (req,res)=>{
Product.find({},(error,products)=>{
if(error){
return res.status(500).json({
message: 'Error al obtener productos'
});
}
//Ok
console.log('ok');
console.log(products);
return res.status(200).json({
products
});
});
}

//RETORNAR PRODUCTO -> GET
module.exports.search = (req,res)=>{
const id = req.params.id ;
console.log('search',id);

Product.findById(id,(error, product) =>{
if(error){
return res.status(404).json({
message: 'Producto no encontrado'
})
}

return res.status(200).json({
product
});
});
};

//CREAR PRODUCTO -> POST
module.exports.create = (req,res)=>{
console.log('create--');
console.log(req.body);

const product = new Product({
name: req.body.name,
price: req.body.price,
description: req.body.description,
categoryId: req.body.categoryId,
image: req.body.image
})
product.save((error,product) => {
if(error){
return res.status(500).json({
message: 'Error al crear el producto'
})
}

return res.status(200).json({
message: 'Producto creado con exito'
});
})
};

//MODIFICAR PRODUCTO -> PUT
module.exports.update = (req,res)=>{
const id = req.params.id;
const name = req.body.name;
const price = req.body.price;
const description = req.body.description;
const categoryId = req.body.categoryId;
const image = req.body.image;

console.log('update');
console.log(id);
console.log(name);
console.log(categoryId);

Product.findByIdAndUpdate(id,{
name,
price,
description,
categoryId,
image
},(error,category) => {
if(error){
return res.status(500).json({
message: 'Error al modificar producto'
})
}
//ok
return res.status(200).json({
message: 'Producto modificado con exito'
});
});
};

//ELIMINAR PRODUCTO -> DELETE
module.exports.delete = (req,res)=>{
const id = req.params.id;
Product.findByIdAndDelete(id,(error, product) =>{
if(error){
return res.status(500).json({
message: 'Error al eliminar producto'
})
}
//ok
return res.status(200).json({
message: 'Producto eliminado con exito'
});
});
};
3 changes: 3 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
const { config } = require('./config');
//mongoose -> mongoAtlas
require('./config/db');
const createApp = require('./app');

const app = createApp();
Expand All @@ -8,4 +10,5 @@ app.listen(config.port, err => {
console.error("Error: ", err);
return;
}
console.log('Ok Server');
});
11 changes: 11 additions & 0 deletions src/models/Category.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
//importamos mongoose
const mongoose = require('mongoose');
//schema
const Schema = mongoose.Schema;
//schema categoria
const categorySchema = new Schema({
name:String,
image:String
},{versionKey:false});

module.exports = mongoose.model('category',categorySchema);
17 changes: 17 additions & 0 deletions src/models/Product.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//importamos mongoose
const mongoose = require('mongoose');
//schema
const Schema = mongoose.Schema;
//schema producto
const productSchema = new Schema({
name:String,
price:String,
description:String,
categoryId:{
type:mongoose.Schema.Types.ObjectId,
ref: 'category'
},
image:String
},{versionKey:false});

module.exports = mongoose.model('product',productSchema);
25 changes: 25 additions & 0 deletions src/routes/category.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const express = require('express');
const router = express.Router();
//Controlador
const categoryController = require('../controllers/categoryController');

//Endpoint para retornar la lista de categorías
router.get('/api/categories/',categoryController.show);

//Endpoint para retornar un categoría
router.get('/api/categories/:id/',categoryController.search);

// Endpoint para crear un categoría
router.post('/api/categories/', categoryController.create);

//Endpoint para modificar un categoría
router.put('/api/categories/:id/', categoryController.update);

//Endpoint para eliminar un categoría
router.delete('/api/categories/:id/', categoryController.delete);

//Endpoint para retornar la lista de productos que pertenecen a una categoría.
router.get('/api/categories/:id/products',categoryController.products);

module.exports = router;

22 changes: 22 additions & 0 deletions src/routes/product.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
const express = require('express');
const router = express.Router();
//Controlador
const productController = require('../controllers/productController');

//Endpoint para retornar la lista de productos
router.get('/api/products/',productController.show);

//Endpoint para retornar un producto
router.get('/api/products/:id/',productController.search);

// Endpoint para crear un producto
router.post('/api/products/', productController.create);

//Endpoint para modificar un producto
router.put('/api/products/:id/', productController.update);

//Endpoint para eliminar un producto
router.delete('/api/products/:id/', productController.delete);

module.exports = router;