Compare commits

..

No commits in common. "23f030ed56f3e035cc1cc43418f779a0d387e53d" and "f3d506c00570ea3f55dffba746c937ffe91e48f3" have entirely different histories.

6 changed files with 36 additions and 116 deletions

View file

@ -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
}

View file

@ -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';

View file

@ -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';

View file

@ -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
}

View file

@ -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) {

View file

@ -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);