done products

This commit is contained in:
Kfir Dayan 2023-06-23 08:57:01 +03:00
parent 3f3aecbe84
commit 23f030ed56
4 changed files with 62 additions and 26 deletions

View file

@ -1,6 +1,6 @@
import { Request, Response } from 'express'; import { Request, Response } from 'express';
import { Product } from '../schemas/productSchema'; import { Product } from '../schemas/productSchema';
import { createProduct } from '../models/productModel'; import { createProduct, getAllProducts, getOne } from '../models/productModel';
import { ApiError } from '../utils/ApiError'; import { ApiError } from '../utils/ApiError';
const create = async (req: Request, res: Response, next) => { const create = async (req: Request, res: Response, next) => {
@ -27,34 +27,40 @@ const create = async (req: Request, res: Response, next) => {
const getAll = async (req: Request, res: Response) => { const getAll = async (req: Request, res: Response) => {
try { try {
const { page, limit } = req.query; const products = await getAllProducts({
const dbPage = Number(page) || 0; page: Number(req.query.page),
const dbLimit = Number(limit) || 50; limit: Number(req.query.limit)
const products = await Product.find(null, 'name description price').sort({ price: 1 }).skip(Number(dbPage) * Number(dbLimit)).limit(Number(dbLimit)); });
if(products instanceof Error) {
res.json(products); console.log("Error in get all products")
} catch (error) { return res.status(products.statusCode).json({ error: products.message });
console.error('Error listing products:', error); }
res.status(500).json({ error: 'An error occurred while listing the products.' }); res.status(200).json(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 Product.findById(id, 'name description price'); const product = await getOne(req.params.id);
if (!product) { if(product instanceof Error) {
res.status(404).json({ error: 'Product not found.' }); return res.status(product.statusCode).json({ error: product.message });
return;
} }
res.json(product); res.status(200).json(product);
} catch (error) { } catch {
console.error('Error getting product:', error); const error = new ApiError('Error during product creation');
res.status(404).json({ error: 'Product not found.' }); error.statusCode = 500;
error.status = 'fail';
res.status(error.statusCode).json({ error: error.message });
} }
} }
export { export {
create, create,
getAll getAll,
getOne
} }

View file

@ -1,7 +1,6 @@
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

@ -14,7 +14,6 @@ const createProduct = async (product: any) => {
error.status = 'fail'; error.status = 'fail';
return error; return error;
} }
console.log("newProduct", newProduct);
await newProduct.save(); await newProduct.save();
return newProduct; return newProduct;
} catch { } catch {
@ -25,7 +24,39 @@ const createProduct = async (product: any) => {
} }
} }
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 { export {
createProduct createProduct,
getAllProducts,
getOne
} }

View file

@ -1,12 +1,12 @@
import express from 'express'; import express from 'express';
import { authenticateToken } from '../middlewares/checkAuth'; import { authenticateToken } from '../middlewares/checkAuth';
import { create, getAll } from '../controllers/productController'; import { create, getAll, getProduct } from '../controllers/productController';
const productRouter = express.Router(); const productRouter = express.Router();
// productRouter.get('/', listProducts); productRouter.get('/', getAll);
productRouter.post('/', authenticateToken, create) productRouter.post('/', authenticateToken, create)
// productRouter.get('/:id', getProduct); productRouter.get('/:id', getProduct);
export default productRouter; export default productRouter;