mirror of
https://github.com/Mueller-Patrick/Betterzon.git
synced 2025-04-19 15:29:18 +00:00
114 lines
2.5 KiB
TypeScript
114 lines
2.5 KiB
TypeScript
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
|
|
*/
|
|
|
|
/**
|
|
* Fetches and returns all known categories
|
|
*/
|
|
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;
|
|
};
|
|
|
|
/**
|
|
* Fetches and returns the category with the specified id
|
|
* @param id The id of the category to fetch
|
|
*/
|
|
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;
|
|
};
|
|
|
|
/**
|
|
* Fetches and returns all categories that match the search term
|
|
* @param term the term to match
|
|
*/
|
|
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;
|
|
};
|