BETTERZON-38: Added all currently required models with required service classes and routers

This commit is contained in:
2020-11-29 13:05:25 +01:00
parent 3de28d8835
commit 0f2e2be246
22 changed files with 1255 additions and 221 deletions
@@ -0,0 +1,5 @@
import {Category} from './category.interface';
export interface Categories {
[key: number]: Category;
}
@@ -0,0 +1,112 @@
/**
* Required External Modules and Interfaces
*/
import express, {Request, Response} from 'express';
import * as CategoryService from './categories.service';
import {Category} from './category.interface';
import {Categories} from './categories.interface';
/**
* Router Definition
*/
export const categoriesRouter = express.Router();
/**
* Controller Definitions
*/
// GET items/
categoriesRouter.get('/', async (req: Request, res: Response) => {
try {
const categories: Categories = await CategoryService.findAll();
res.status(200).send(categories);
} catch (e) {
res.status(404).send(e.message);
}
});
// GET items/:id
categoriesRouter.get('/:id', async (req: Request, res: Response) => {
const id: number = parseInt(req.params.id, 10);
if (!id) {
res.status(400).send('Missing parameters.');
return;
}
try {
const category: Category = await CategoryService.find(id);
res.status(200).send(category);
} catch (e) {
res.status(404).send(e.message);
}
});
// GET items/:name
categoriesRouter.get('/search/:term', async (req: Request, res: Response) => {
const term: string = req.params.term;
if (!term) {
res.status(400).send('Missing parameters.');
return;
}
try {
const categories: Categories = await CategoryService.findBySearchTerm(term);
res.status(200).send(categories);
} catch (e) {
res.status(404).send(e.message);
}
});
// POST items/
// categoriesRouter.post('/', async (req: Request, res: Response) => {
// try {
// const category: Category = req.body.category;
//
// await CategoryService.create(category);
//
// res.sendStatus(201);
// } catch (e) {
// res.status(404).send(e.message);
// }
// });
//
// // PUT items/
//
// categoriesRouter.put('/', async (req: Request, res: Response) => {
// try {
// const category: Category = req.body.category;
//
// await CategoryService.update(category);
//
// res.sendStatus(200);
// } catch (e) {
// res.status(500).send(e.message);
// }
// });
//
// // DELETE items/:id
//
// categoriesRouter.delete('/:id', async (req: Request, res: Response) => {
// try {
// const id: number = parseInt(req.params.id, 10);
// await CategoryService.remove(id);
//
// res.sendStatus(200);
// } catch (e) {
// res.status(500).send(e.message);
// }
// });
@@ -0,0 +1,135 @@
import * as dotenv from 'dotenv';
dotenv.config();
const mariadb = require('mariadb');
const pool = mariadb.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
connectionLimit: 5
});
/**
* Data Model Interfaces
*/
import {Category} from './category.interface';
import {Categories} from './categories.interface';
/**
* Service Methods
*/
export const findAll = async (): Promise<Categories> => {
let conn;
let categRows = [];
try {
conn = await pool.getConnection();
const rows = await conn.query('SELECT category_id, name FROM categories');
for (let row in rows) {
if (row !== 'meta') {
let categ: Category = {
category_id: 0,
name: ''
};
const sqlCateg = rows[row];
categ.category_id = sqlCateg.category_id;
categ.name = sqlCateg.name;
categRows.push(categ);
}
}
} catch (err) {
throw err;
} finally {
if (conn) {
conn.end();
}
}
return categRows;
};
export const find = async (id: number): Promise<Category> => {
let conn;
let categ: any;
try {
conn = await pool.getConnection();
const rows = await conn.query('SELECT category_id, name FROM categories WHERE category_id = ?', id);
for (let row in rows) {
if (row !== 'meta') {
categ = rows[row];
}
}
} catch (err) {
throw err;
} finally {
if (conn) {
conn.end();
}
}
return categ;
};
export const findBySearchTerm = async (term: string): Promise<Categories> => {
let conn;
let categRows = [];
try {
conn = await pool.getConnection();
term = '%' + term + '%';
const rows = await conn.query('SELECT category_id, name FROM categories WHERE name LIKE ?', term);
for (let row in rows) {
if (row !== 'meta') {
categRows.push(rows[row]);
}
}
} catch (err) {
throw err;
} finally {
if (conn) {
conn.end();
}
}
return categRows;
};
// export const create = async (newItem: Product): Promise<void> => {
// let conn;
// try {
// conn = await pool.getConnection();
// await conn.query("");
//
// } catch (err) {
// throw err;
// } finally {
// if (conn) conn.end();
// }
// };
//
// export const update = async (updatedItem: Product): Promise<void> => {
// if (models.products[updatedItem.product_id]) {
// models.products[updatedItem.product_id] = updatedItem;
// return;
// }
//
// throw new Error("No record found to update");
// };
//
// export const remove = async (id: number): Promise<void> => {
// const record: Product = models.products[id];
//
// if (record) {
// delete models.products[id];
// return;
// }
//
// throw new Error("No record found to delete");
// };
@@ -0,0 +1,4 @@
export interface Category {
category_id: number;
name: string;
}