added endpoints for object deletion
This commit is contained in:
		@@ -1,4 +1,5 @@
 | 
				
			|||||||
import AbstractProductService from '../services/abstractproduct.js';
 | 
					import AbstractProductService from '../services/abstractproduct.js';
 | 
				
			||||||
 | 
					import ProductService from '../services/product.js';
 | 
				
			||||||
import fs from 'fs';
 | 
					import fs from 'fs';
 | 
				
			||||||
import path from 'path';
 | 
					import path from 'path';
 | 
				
			||||||
import customError from '../response/customError.js';
 | 
					import customError from '../response/customError.js';
 | 
				
			||||||
@@ -69,7 +70,7 @@ class AbstractProductController {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async getImage(req, res) {
 | 
					    async getImage(req, res) {
 | 
				
			||||||
        let { localId, groupId } = req.params
 | 
					        let { localId, groupId } = req.params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let imageFilename = (await AbstractProductService.getByLocalId(groupId, localId)).image_filename
 | 
					        let imageFilename = (await AbstractProductService.getByLocalId(groupId, localId)).image_filename
 | 
				
			||||||
        let imagePath = path.join(path.resolve(path.dirname('')), `/uploads/${imageFilename}.png`);
 | 
					        let imagePath = path.join(path.resolve(path.dirname('')), `/uploads/${imageFilename}.png`);
 | 
				
			||||||
@@ -79,6 +80,13 @@ class AbstractProductController {
 | 
				
			|||||||
        return res.status(200).send(image)
 | 
					        return res.status(200).send(image)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async delete(req, res) {
 | 
				
			||||||
 | 
					        let { localId, groupId } = req.params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        await AbstractProductService.delete(groupId, localId)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return res.status(200).send(translate(req.headers["accept-language"], responseCodes.responses.general.ok))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default new AbstractProductController();
 | 
					export default new AbstractProductController();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,6 @@
 | 
				
			|||||||
import CategoryService from "../services/category.js";
 | 
					import CategoryService from "../services/category.js";
 | 
				
			||||||
 | 
					import AbstractProductService from "../services/abstractproduct.js";
 | 
				
			||||||
 | 
					import ProductService from "../services/product.js";
 | 
				
			||||||
import translate from "../utils/translate.js";
 | 
					import translate from "../utils/translate.js";
 | 
				
			||||||
import responseCodes from "../response/responseCodes.js";
 | 
					import responseCodes from "../response/responseCodes.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,6 +30,14 @@ class CategoryController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return res.status(200).send(result)
 | 
					        return res.status(200).send(result)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async delete(req, res) {
 | 
				
			||||||
 | 
					        const { groupId, localId } = req.params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        await CategoryService.delete(groupId, localId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return res.status(200).send(translate(req.headers["accept-language"], responseCodes.responses.general.ok))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default new CategoryController();
 | 
					export default new CategoryController();
 | 
				
			||||||
@@ -35,6 +35,16 @@ class AbstractProductController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return res.status(200).send(result)
 | 
					        return res.status(200).send(result)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async delete(req, res) {
 | 
				
			||||||
 | 
					        let { groupId, localId } = req.params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let id = (await ProductService.getByLocalId(groupId, localId)).id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        await ProductService.delete(id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return res.status(200).send(translate(req.headers["accept-language"], responseCodes.responses.general.ok));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default new AbstractProductController();
 | 
					export default new AbstractProductController();
 | 
				
			||||||
@@ -16,5 +16,6 @@ AbstractProductRouter.post('/create', upload.single("file"), tryHandler(auth.aut
 | 
				
			|||||||
AbstractProductRouter.post('/update', upload.single("file"), tryHandler(auth.authenticate), tryHandler(auth.userIsInGroup), tryHandler(existance.localIdExists), tryHandler(AbstractProductController.update));
 | 
					AbstractProductRouter.post('/update', upload.single("file"), tryHandler(auth.authenticate), tryHandler(auth.userIsInGroup), tryHandler(existance.localIdExists), tryHandler(AbstractProductController.update));
 | 
				
			||||||
AbstractProductRouter.get('/:groupId/:localId', tryHandler(auth.authenticate), tryHandler(auth.userIsInGroup), tryHandler(existance.localIdExists), tryHandler(AbstractProductController.getById));
 | 
					AbstractProductRouter.get('/:groupId/:localId', tryHandler(auth.authenticate), tryHandler(auth.userIsInGroup), tryHandler(existance.localIdExists), tryHandler(AbstractProductController.getById));
 | 
				
			||||||
AbstractProductRouter.get('/getImage/:groupId/:localId', tryHandler(auth.authenticate), tryHandler(auth.userIsInGroup), tryHandler(existance.localIdExists), tryHandler(AbstractProductController.getImage));
 | 
					AbstractProductRouter.get('/getImage/:groupId/:localId', tryHandler(auth.authenticate), tryHandler(auth.userIsInGroup), tryHandler(existance.localIdExists), tryHandler(AbstractProductController.getImage));
 | 
				
			||||||
 | 
					AbstractProductRouter.delete('/:groupId/:localId', tryHandler(auth.authenticate), tryHandler(auth.userIsInGroup), tryHandler(existance.localIdExists), tryHandler(AbstractProductController.delete));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default AbstractProductRouter;
 | 
					export default AbstractProductRouter;
 | 
				
			||||||
@@ -8,6 +8,7 @@ const CategoryRouter = new Router();
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CategoryRouter.post('/create', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(auth.userIsInGroup), tryHandler(CategoryController.create));
 | 
					CategoryRouter.post('/create', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(auth.userIsInGroup), tryHandler(CategoryController.create));
 | 
				
			||||||
CategoryRouter.post('/update', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(auth.userIsInGroup), tryHandler(existance.localIdExists), tryHandler(CategoryController.update));
 | 
					CategoryRouter.post('/update', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(auth.userIsInGroup), tryHandler(existance.localIdExists), tryHandler(CategoryController.update));
 | 
				
			||||||
CategoryRouter.get('/:groupId/:localId', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(auth.userIsInGroup), tryHandler(existance.localIdExists), tryHandler(CategoryController.getByLocalId))
 | 
					CategoryRouter.get('/:groupId/:localId', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(auth.userIsInGroup), tryHandler(existance.localIdExists), tryHandler(CategoryController.getByLocalId));
 | 
				
			||||||
 | 
					CategoryRouter.delete('/:groupId/:localId', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(auth.userIsInGroup), tryHandler(existance.localIdExists), tryHandler(CategoryController.delete));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default CategoryRouter;
 | 
					export default CategoryRouter;
 | 
				
			||||||
@@ -9,5 +9,6 @@ const ProductRouter = new Router();
 | 
				
			|||||||
ProductRouter.post('/create', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(auth.userIsInGroup), tryHandler(ProductController.create));
 | 
					ProductRouter.post('/create', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(auth.userIsInGroup), tryHandler(ProductController.create));
 | 
				
			||||||
ProductRouter.post('/update', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(existance.localIdExists), tryHandler(auth.userIsInGroup), tryHandler(ProductController.update));
 | 
					ProductRouter.post('/update', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(existance.localIdExists), tryHandler(auth.userIsInGroup), tryHandler(ProductController.update));
 | 
				
			||||||
ProductRouter.get('/:groupId/:localId', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(existance.localIdExists), tryHandler(auth.userIsInGroup), tryHandler(ProductController.getByLocalId))
 | 
					ProductRouter.get('/:groupId/:localId', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(existance.localIdExists), tryHandler(auth.userIsInGroup), tryHandler(ProductController.getByLocalId))
 | 
				
			||||||
 | 
					ProductRouter.delete('/:groupId/:localId', tryHandler(auth.authenticate), tryHandler(existance.groupExists), tryHandler(existance.localIdExists), tryHandler(auth.userIsInGroup), tryHandler(ProductController.delete))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default ProductRouter;
 | 
					export default ProductRouter;
 | 
				
			||||||
@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					import ProductService from './product.js';
 | 
				
			||||||
import db from '../db.js';
 | 
					import db from '../db.js';
 | 
				
			||||||
import errorHandler from '../utils/pgerrorhandler.js';
 | 
					import errorHandler from '../utils/pgerrorhandler.js';
 | 
				
			||||||
import responses from '../response/responseCodes.js';
 | 
					import responses from '../response/responseCodes.js';
 | 
				
			||||||
@@ -70,6 +71,19 @@ class AbstractProductService {
 | 
				
			|||||||
        if (result.rowCount == 0) throw new customError(`Abstract product not found`, responses.responses.abstractproducts.not_found)
 | 
					        if (result.rowCount == 0) throw new customError(`Abstract product not found`, responses.responses.abstractproducts.not_found)
 | 
				
			||||||
        return result.rows[0]
 | 
					        return result.rows[0]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async getAllFromCategory(groupId, categoryId) {
 | 
				
			||||||
 | 
					        let result = (await db.query("SELECT * FROM abstract_products WHERE group_id = $1 AND category = $2", [groupId, categoryId]));
 | 
				
			||||||
 | 
					        return result.rows
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async delete(groupId, localId) {
 | 
				
			||||||
 | 
					        let productsOfAbstractProduct = await ProductService.getByAbstractProductID(groupId, localId);
 | 
				
			||||||
 | 
					        productsOfAbstractProduct.forEach(async (product) => {
 | 
				
			||||||
 | 
					            await ProductService.delete(product.id)
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        await db.query("DELETE FROM abstract_products WHERE group_id = $1 AND local_id = $2", [groupId, localId])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default new AbstractProductService();
 | 
					export default new AbstractProductService();
 | 
				
			||||||
@@ -1,6 +1,9 @@
 | 
				
			|||||||
 | 
					import ProductService from "./product.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import db from '../db.js';
 | 
					import db from '../db.js';
 | 
				
			||||||
import customError from '../response/customError.js';
 | 
					import customError from '../response/customError.js';
 | 
				
			||||||
import responseCodes from '../response/responseCodes.js';
 | 
					import responseCodes from '../response/responseCodes.js';
 | 
				
			||||||
 | 
					import AbstractProductService from "./abstractproduct.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CategoryService {
 | 
					class CategoryService {
 | 
				
			||||||
    async create(groupId, categoryId, name) {
 | 
					    async create(groupId, categoryId, name) {
 | 
				
			||||||
@@ -27,6 +30,16 @@ class CategoryService {
 | 
				
			|||||||
        let result = (await db.query("SELECT group_id, local_id, name FROM categories WHERE group_id = $1", [groupId])).rows
 | 
					        let result = (await db.query("SELECT group_id, local_id, name FROM categories WHERE group_id = $1", [groupId])).rows
 | 
				
			||||||
        return result
 | 
					        return result
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async delete(groupId, localId) {
 | 
				
			||||||
 | 
					        let abstractProductInCategory = await AbstractProductService.getAllFromCategory(groupId, localId);
 | 
				
			||||||
 | 
					        abstractProductInCategory.forEach(async (abstractProduct) => {
 | 
				
			||||||
 | 
					            await AbstractProductService.delete(groupId, abstractProduct.local_id)
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        await db.query("DELETE FROM categories WHERE group_id = $1 AND local_id = $2", [groupId, localId]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default new CategoryService();
 | 
					export default new CategoryService();
 | 
				
			||||||
@@ -57,6 +57,15 @@ class ProductService {
 | 
				
			|||||||
        if (result.rowCount == 0) throw new customError(`getByLocalId product not found`, responseCodes.responses.products.not_found);
 | 
					        if (result.rowCount == 0) throw new customError(`getByLocalId product not found`, responseCodes.responses.products.not_found);
 | 
				
			||||||
        return result.rows[0];
 | 
					        return result.rows[0];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async getByAbstractProductID(groupId, abstractProductID) {
 | 
				
			||||||
 | 
					        let result = (await db.query("SELECT * FROM products WHERE group_id = $1 AND abstract_product_id = $2", [groupId, abstractProductID]))
 | 
				
			||||||
 | 
					        return result.rows
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async delete(ID) {
 | 
				
			||||||
 | 
					        await db.query("DELETE FROM products WHERE id = $1", [ID])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default new ProductService();
 | 
					export default new ProductService();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user