En esta segunda parte de nuestro proyecto continuaremos con la creación de productos (API)
Crearemos las rutas y controladores de productos y categorias:
- GET /products (Todos los productos)
- GET /products/:id (Un solo producto)
- POST /products (Nuevo producto)
- PUT /products/:id (Editar producto)
- DELETE /products (Eliminar producto)
Nuestro modelo Productos tendrá la siguiente estructura:
- title
- price
- imgUrl
- category ** Relacionado con el Modelo Category
Modelo Categorias
- title
app.js
import express from 'express'
import morgan from 'morgan'
import cors from 'cors'
import categoriesRoutes from './routes/categories.routes'
import productsRoutes from './routes/products.routes'
const app = express()
app.set('PORT', process.env.PORT || 3001)
// Middlewares
app.use(cors())
app.use(morgan('dev'))
app.use(express.urlencoded({extended: false}))
app.use(express.json())
// Routes
app.get('/', (req, res) => {
res.send('Welcome')
})
app.use(categoriesRoutes)
app.use(productsRoutes)
export default app
models/
models/Categories.js
import { Schema, model } from "mongoose";
const categoriesSchema = new Schema({
title: String,
},{
versionKey: false
});
export default model("Category", categoriesSchema);
models/Products.js
import { Schema, model } from "mongoose";
const productsSchema = new Schema(
{
title: { type: String },
price: Number,
imgUrl: String,
category: [
{
ref: "Category",
type: Schema.Types.ObjectId,
},
],
},
{
timestamps: true,
versionKey: false,
}
);
export default model("Products", productsSchema);
Routes
routes/categories.routes.js
import { Router } from 'express'
import * as categoriesCtrl from '../controllers/categories.controller'
const router = Router()
router.get('/categories', categoriesCtrl.getAllCategories)
router.get('/categories/:id', categoriesCtrl.getSingleCategoryById)
router.post('/categories', categoriesCtrl.newCategory)
router.put('/categories/:id', categoriesCtrl.editCategoryById)
router.delete('/categories/:id', categoriesCtrl.deleteCategoryById)
export default router
routes/products.routes.js
import { Router } from 'express'
import * as productsCtrl from '../controllers/products.controller'
const router = Router()
router.get('/products', productsCtrl.getAllProducts)
router.get('/products/:id', productsCtrl.getSingleProductById)
router.post('/products', productsCtrl.newProduct)
router.put('/products/:id', productsCtrl.editProductById)
router.delete('/products/:id', productsCtrl.deleteProductById)
export default router
Controllers
controllers/categories.controller.js
import Category from "../models/Categories";
export const getAllCategories = async (req, res) => {
const data = await Category.find();
res.status(200).json(data);
};
export const getSingleCategoryById = async (req, res) => {
const singleCategory = await Category.findById(req.params.id);
res.status(200).json(singleCategory);
};
export const newCategory = async (req, res) => {
const { title } = req.body;
try {
const newCategory = new Category({
title,
});
await newCategory.save();
res.status(201).json();
} catch (error) {
console.log(error);
}
};
export const editCategoryById = async (req, res) => {
const updatedCategory = await Category.findByIdAndUpdate(req.params.id, req.body, {new: true, useFindAndModify: false})
res.status(200).json(updatedCategory)
};
export const deleteCategoryById = async (req, res) => {
await Category.findOneAndDelete(req.params.id, {useFindAndModify: false});
res.status(204).json();
};
controllers/products.controller.js
import Products from "../models/Products";
export const getAllProducts = async (req, res) => {
const data = await Products.find().populate("category");
res.status(200).json(data);
};
export const getSingleProductById = async (req, res) => {
const singleProduct = await Products.findById(req.params.id).populate("category");
res.status(200).json(singleProduct);
};
export const newProduct = async (req, res) => {
const { title, price, imgUrl, category } = req.body;
try {
const newCategory = new Products({
title,
price,
imgUrl,
category,
});
await newCategory.save();
res.status(201).json();
} catch (error) {
console.log(error);
}
};
export const editProductById = async (req, res) => {
const updatedProduct = await Products.findByIdAndUpdate(req.params.id, req.body, {new: true, useFindAndModify: false}).populate("category")
res.status(200).json(updatedProduct)
};
export const deleteProductById = async (req, res) => {
await Products.findOneAndDelete(req.params.id, { useFindAndModify: false });
res.status(204).json();
};
Con eso tenemos ya la creacion de productos y categorias.
en el siguiente parte continuaremos con el proyecto con la creacion de Usuarios y roles.
Si tienes alguna duda o sugerencia no dudes en consultarme en los comentarios abajo.
¡Feliz día y Felicidad!
¡Ah! no olvides de visitar mi página web https://tupaginaonline.net