added category
This commit is contained in:
		@@ -34,6 +34,7 @@ CREATE TABLE IF NOT EXISTS Categories (
 | 
				
			|||||||
CREATE TABLE IF NOT EXISTS Products (
 | 
					CREATE TABLE IF NOT EXISTS Products (
 | 
				
			||||||
    ID SERIAL PRIMARY KEY,
 | 
					    ID SERIAL PRIMARY KEY,
 | 
				
			||||||
    group_id INT,
 | 
					    group_id INT,
 | 
				
			||||||
 | 
					    local_id INT,
 | 
				
			||||||
    abstract_product_id INT,
 | 
					    abstract_product_id INT,
 | 
				
			||||||
    amount INT,
 | 
					    amount INT,
 | 
				
			||||||
    date_of_production DATE,
 | 
					    date_of_production DATE,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								src/controllers/category.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/controllers/category.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					import CategoryService from "../services/category.js";
 | 
				
			||||||
 | 
					import log
 | 
				
			||||||
 | 
					    from "../utils/log.js";
 | 
				
			||||||
 | 
					const TAG = "controllers/category.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class CategoryController {
 | 
				
			||||||
 | 
					    async create(req, res) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            const { localId, categoryName, groupId } = req.body;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            await CategoryService.create(groupId, localId, categoryName);
 | 
				
			||||||
 | 
					            return res.status(200).send("Success");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } catch (e) { return res.status(500).send(log.unknownError(`${TAG}/create: ${e}`)); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async update(req, res) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            const { localId, groupId, name } = req.body;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            await CategoryService.update(groupId, localId, name);
 | 
				
			||||||
 | 
					            return res.status(200).send("Success");
 | 
				
			||||||
 | 
					        } catch (e) { return res.status(500).send(log.unknownError(`${TAG}/update: ${e}`)); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default new CategoryController();
 | 
				
			||||||
@@ -6,6 +6,7 @@ import log from './utils/log.js'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import config from '../config.json' with {type: "json"};
 | 
					import config from '../config.json' with {type: "json"};
 | 
				
			||||||
import ProductRouter from './routers/product.js';
 | 
					import ProductRouter from './routers/product.js';
 | 
				
			||||||
 | 
					import CategoryRouter from './routers/category.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const app = express();
 | 
					const app = express();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,6 +17,7 @@ app.use('/api/user/', UserRouter);
 | 
				
			|||||||
app.use('/api/group/', GroupRouter);
 | 
					app.use('/api/group/', GroupRouter);
 | 
				
			||||||
app.use('/api/abstractproduct', AbstractProductRouter);
 | 
					app.use('/api/abstractproduct', AbstractProductRouter);
 | 
				
			||||||
app.use('/api/product', ProductRouter);
 | 
					app.use('/api/product', ProductRouter);
 | 
				
			||||||
 | 
					app.use('/api/category', CategoryRouter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
app.listen(config.port, () => {
 | 
					app.listen(config.port, () => {
 | 
				
			||||||
    log.info(`Application has started on port ${config.port}`)
 | 
					    log.info(`Application has started on port ${config.port}`)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@ import UserService from '../services/user.js';
 | 
				
			|||||||
import GroupService from '../services/group.js';
 | 
					import GroupService from '../services/group.js';
 | 
				
			||||||
import AbstractProductService from '../services/abstractproduct.js';
 | 
					import AbstractProductService from '../services/abstractproduct.js';
 | 
				
			||||||
import ProductService from '../services/product.js';
 | 
					import ProductService from '../services/product.js';
 | 
				
			||||||
 | 
					import CategoryService from '../services/category.js';
 | 
				
			||||||
import log from '../utils/log.js';
 | 
					import log from '../utils/log.js';
 | 
				
			||||||
import statuses from '../utils/status.js';
 | 
					import statuses from '../utils/status.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -79,6 +80,26 @@ const productExists = async (req, res, next) => {
 | 
				
			|||||||
    } catch (e) { return res.status(500).send(log.unknownError(`${TAG}/productExists: ${e}`)) }
 | 
					    } catch (e) { return res.status(500).send(log.unknownError(`${TAG}/productExists: ${e}`)) }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const categoryNameDoesntExist = async (req, res, next) => {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        const { categoryName, localId, groupId } = req.body;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let result = await CategoryService.getByName(groupId, localId, categoryName);
 | 
				
			||||||
 | 
					        if (result != statuses.not_found) return res.status(400).send("Such category name exists");
 | 
				
			||||||
 | 
					        next();
 | 
				
			||||||
 | 
					    } catch (e) { return res.status(500).send(log.unknownError(`${TAG}/categoryNameDoesntExist: ${e}`)) }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const categoryExists = async (req, res, next) => {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        const { localId, groupId } = req.body;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let result = await CategoryService.getById(groupId, localId);
 | 
				
			||||||
 | 
					        if (!result || result == statuses.not_found) return res.status(404).send("No such category");
 | 
				
			||||||
 | 
					        next();
 | 
				
			||||||
 | 
					    } catch (e) { return res.status(500).send(log.unknownError(`${TAG}/categoryExists: ${e}`)) }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
    usernameExists,
 | 
					    usernameExists,
 | 
				
			||||||
    usernameDoesntExist,
 | 
					    usernameDoesntExist,
 | 
				
			||||||
@@ -88,5 +109,8 @@ export default {
 | 
				
			|||||||
    groupNameDoesntExist,
 | 
					    groupNameDoesntExist,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    abstractProductExists,
 | 
					    abstractProductExists,
 | 
				
			||||||
    productExists
 | 
					    productExists,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    categoryNameDoesntExist,
 | 
				
			||||||
 | 
					    categoryExists
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										11
									
								
								src/routers/category.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/routers/category.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					import { Router } from 'express';
 | 
				
			||||||
 | 
					import auth from '../middlewares/auth.js';
 | 
				
			||||||
 | 
					import existance from '../middlewares/existance.js';
 | 
				
			||||||
 | 
					import CategoryController from '../controllers/category.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const CategoryRouter = new Router();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CategoryRouter.post('/create', auth.authenticate, existance.groupExists, existance.categoryNameDoesntExist, CategoryController.create);
 | 
				
			||||||
 | 
					CategoryRouter.post('/update', auth.authenticate, existance.groupExists, existance.categoryExists, CategoryController.update)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default CategoryRouter;
 | 
				
			||||||
							
								
								
									
										26
									
								
								src/services/category.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/services/category.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					import db from '../db.js';
 | 
				
			||||||
 | 
					import statuses from '../utils/status.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class CategoryService {
 | 
				
			||||||
 | 
					    async create(groupId, categoryId, name) {
 | 
				
			||||||
 | 
					        await db.query("INSERT INTO categories (group_id, local_id, name) VALUES ($1, $2, $3)", [groupId, categoryId, name])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async update(groupId, categoryId, name) {
 | 
				
			||||||
 | 
					        await db.query("UPDATE categories SET name = $1 WHERE group_id = $2 AND local_id = $3", [name, groupId, categoryId]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async getById(groupId, localId) {
 | 
				
			||||||
 | 
					        let result = (await db.query("SELECT * FROM categories WHERE group_id = $1 AND local_id = $2", [groupId, localId]))
 | 
				
			||||||
 | 
					        if (result.rowCount == 0) return statuses.not_found;
 | 
				
			||||||
 | 
					        return result.rows[0]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async getByName(groupId, localId, name) {
 | 
				
			||||||
 | 
					        let result = (await db.query("SELECT * FROM categories WHERE group_id = $1 AND local_id = $2 AND name = $3", [groupId, localId, name]));
 | 
				
			||||||
 | 
					        if (result.rowCount == 0) return statuses.not_found;
 | 
				
			||||||
 | 
					        return result.rows[0];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default new CategoryService();
 | 
				
			||||||
		Reference in New Issue
	
	Block a user