Proyecto (Parte 2) - Sistema de ventas para Local - Node - ExpressJs - React - MongoDB (MERN)

Words
516
Reading
3 min
Listen
Play
5y

MERN.png

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

Proyecto (Parte 2) - Sistema de ventas para Local - Node - ExpressJ... | Ecency