Compare commits
No commits in common. "23f030ed56f3e035cc1cc43418f779a0d387e53d" and "f3d506c00570ea3f55dffba746c937ffe91e48f3" have entirely different histories.
23f030ed56
...
f3d506c005
6 changed files with 36 additions and 116 deletions
|
@ -1,66 +1,44 @@
|
||||||
import { Request, Response } from 'express';
|
import { Request, Response } from 'express';
|
||||||
import { Product } from '../schemas/productSchema';
|
import { Product } from '../schemas/productSchema';
|
||||||
import { createProduct, getAllProducts, getOne } from '../models/productModel';
|
// import { handleCreateProductError } from '../middlewares/errorHandler';
|
||||||
import { ApiError } from '../utils/ApiError';
|
|
||||||
|
|
||||||
const create = async (req: Request, res: Response, next) => {
|
|
||||||
|
export async function createProduct(req: Request, res: Response) {
|
||||||
try {
|
try {
|
||||||
const { name, description, price } = req.body;
|
const product = new Product(req.body);
|
||||||
const product = await createProduct({
|
await product.save();
|
||||||
name,
|
res.json(product);
|
||||||
description,
|
} catch (error) {
|
||||||
price,
|
console.error('Error creating product:', error);
|
||||||
userId: req.body.userId
|
// handleCreateProductError(res, error);
|
||||||
});
|
|
||||||
if(product instanceof Error) {
|
|
||||||
console.log("Error in create product")
|
|
||||||
return next(product);
|
|
||||||
}
|
|
||||||
res.status(201).json(product);
|
|
||||||
} catch {
|
|
||||||
const error = new ApiError('Error during product creation');
|
|
||||||
error.statusCode = 500;
|
|
||||||
error.status = 'fail';
|
|
||||||
next(error);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const getAll = async (req: Request, res: Response) => {
|
export async function listProducts(req: Request, res: Response) {
|
||||||
try {
|
try {
|
||||||
const products = await getAllProducts({
|
const { page, limit } = req.query;
|
||||||
page: Number(req.query.page),
|
const dbPage = Number(page) || 0;
|
||||||
limit: Number(req.query.limit)
|
const dbLimit = Number(limit) || 50;
|
||||||
});
|
const products = await Product.find(null, 'name description price').sort({ price: 1 }).skip(Number(dbPage) * Number(dbLimit)).limit(Number(dbLimit));
|
||||||
if(products instanceof Error) {
|
|
||||||
console.log("Error in get all products")
|
res.json(products);
|
||||||
return res.status(products.statusCode).json({ error: products.message });
|
} catch (error) {
|
||||||
}
|
console.error('Error listing products:', error);
|
||||||
res.status(200).json(products);
|
res.status(500).json({ error: 'An error occurred while listing the products.' });
|
||||||
} catch {
|
|
||||||
const error = new ApiError('Error during product creation');
|
|
||||||
error.statusCode = 500;
|
|
||||||
error.status = 'fail';
|
|
||||||
res.status(error.statusCode).json({ error: error.message });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getProduct(req: Request, res: Response) {
|
export async function getProduct(req: Request, res: Response) {
|
||||||
|
const { id } = req.params;
|
||||||
try {
|
try {
|
||||||
const product = await getOne(req.params.id);
|
const product = await Product.findById(id, 'name description price');
|
||||||
if(product instanceof Error) {
|
if(!product) {
|
||||||
return res.status(product.statusCode).json({ error: product.message });
|
res.status(404).json({ error: 'Product not found.' });
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
res.status(200).json(product);
|
res.json(product);
|
||||||
} catch {
|
} catch (error) {
|
||||||
const error = new ApiError('Error during product creation');
|
console.error('Error getting product:', error);
|
||||||
error.statusCode = 500;
|
res.status(404).json({ error: 'Product not found.' });
|
||||||
error.status = 'fail';
|
|
||||||
res.status(error.statusCode).json({ error: error.message });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
|
||||||
create,
|
|
||||||
getAll,
|
|
||||||
getOne
|
|
||||||
}
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Request, Response } from 'express';
|
import { Request, Response } from 'express';
|
||||||
import { createUser, loginUser, getAllUsers, deleteUser } from '../models/userModel';
|
import { createUser, loginUser, getAllUsers, deleteUser } from '../models/userModel';
|
||||||
import { ApiError } from '../utils/ApiError';
|
import { ApiError } from '../utils/ApiError';
|
||||||
|
import bcrypt from 'bcryptjs';
|
||||||
import jwt from 'jsonwebtoken';
|
import jwt from 'jsonwebtoken';
|
||||||
import { clearJwtCookie, setJwtCookie } from '../middlewares/checkAuth';
|
import { clearJwtCookie, setJwtCookie } from '../middlewares/checkAuth';
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ app.use('/products', productRouter);
|
||||||
app.use('/cart', cartRouter);
|
app.use('/cart', cartRouter);
|
||||||
|
|
||||||
app.all('*', (req, res, next) => {
|
app.all('*', (req, res, next) => {
|
||||||
|
// res.status(404).json({ error: 'Route not found' });
|
||||||
const error = new ApiError('Are you lost?');
|
const error = new ApiError('Are you lost?');
|
||||||
error.statusCode = 404;
|
error.statusCode = 404;
|
||||||
error.status = 'fail';
|
error.status = 'fail';
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
import { Product } from '../schemas/productSchema';
|
|
||||||
import { Request, Response } from 'express';
|
|
||||||
import { errorHandler } from '../middlewares/errorHandler';
|
|
||||||
import { ApiError } from '../utils/ApiError';
|
|
||||||
|
|
||||||
const createProduct = async (product: any) => {
|
|
||||||
try {
|
|
||||||
|
|
||||||
const newProduct = new Product(product);
|
|
||||||
const isExist = await Product.findOne({ name: product.name, userId: product.userId });
|
|
||||||
if(isExist) {
|
|
||||||
const error = new ApiError('Product already exists');
|
|
||||||
error.statusCode = 400;
|
|
||||||
error.status = 'fail';
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
await newProduct.save();
|
|
||||||
return newProduct;
|
|
||||||
} catch {
|
|
||||||
const error = new ApiError('Error during product creation');
|
|
||||||
error.statusCode = 500;
|
|
||||||
error.status = 'fail';
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const getAllProducts = async (query: {
|
|
||||||
page: number,
|
|
||||||
limit: number
|
|
||||||
}) => {
|
|
||||||
try {
|
|
||||||
const { page, limit } = query;
|
|
||||||
const dbPage = page || 0;
|
|
||||||
const dbLimit = limit || 50;
|
|
||||||
const products = await Product.find(null, 'name description price').sort({ price: 1 }).skip(dbPage * dbLimit).limit(dbLimit);
|
|
||||||
return products;
|
|
||||||
} catch {
|
|
||||||
const error = new ApiError('Error during product creation');
|
|
||||||
error.statusCode = 500;
|
|
||||||
error.status = 'fail';
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const getOne = async (id: string) => {
|
|
||||||
try {
|
|
||||||
const product = await Product.findById(id, 'name description price');
|
|
||||||
return product;
|
|
||||||
} catch {
|
|
||||||
const error = new ApiError('Product not found');
|
|
||||||
error.statusCode = 404;
|
|
||||||
error.status = 'fail';
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export {
|
|
||||||
createProduct,
|
|
||||||
getAllProducts,
|
|
||||||
getOne
|
|
||||||
}
|
|
|
@ -1,8 +1,10 @@
|
||||||
import { User } from "../schemas/userSchema";
|
import { User, IUser } from "../schemas/userSchema";
|
||||||
import validate from 'deep-email-validator';
|
import validate from 'deep-email-validator';
|
||||||
import { ApiError } from "../utils/ApiError";
|
import { ApiError } from "../utils/ApiError";
|
||||||
|
import { response } from "express";
|
||||||
import bcrypt from 'bcryptjs';
|
import bcrypt from 'bcryptjs';
|
||||||
|
|
||||||
|
|
||||||
const createUser = async (user: any) => {
|
const createUser = async (user: any) => {
|
||||||
|
|
||||||
if (!user.email || !user.password || !user.address) {
|
if (!user.email || !user.password || !user.address) {
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import express from 'express';
|
import express from 'express';
|
||||||
import { authenticateToken } from '../middlewares/checkAuth';
|
import { authenticateToken } from '../middlewares/checkAuth';
|
||||||
import { create, getAll, getProduct } from '../controllers/productController';
|
import { createProduct, listProducts, getProduct } from '../controllers/productController';
|
||||||
|
|
||||||
const productRouter = express.Router();
|
const productRouter = express.Router();
|
||||||
|
|
||||||
productRouter.get('/', getAll);
|
productRouter.post('/', authenticateToken, createProduct)
|
||||||
productRouter.post('/', authenticateToken, create)
|
productRouter.get('/', listProducts);
|
||||||
productRouter.get('/:id', getProduct);
|
productRouter.get('/:id', getProduct);
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue