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

in Develop Spanish3 years ago (edited)


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

Sort:  
 3 years ago  

Me encantan todos tus posts, muchas gracias por escribir en nuestra comunidad

De nada estimado. Seguiré publicando

Hi I'm new here .can you help me out here by guarding me.