41 lines
1.7 KiB
TypeScript
41 lines
1.7 KiB
TypeScript
import * as mysql from 'mysql';
|
|
import { Product } from 'ssn';
|
|
import createStatement from './database/createStatement';
|
|
import * as database from './database/database';
|
|
import products from './exports/productList';
|
|
import IDatabaseRow from './interfaces/IDatabaseRow';
|
|
import IDatabaseSettings from './interfaces/IDatabaseSettings';
|
|
import IProductData from './interfaces/IProductData';
|
|
import writeLog from './logger/writeLog';
|
|
|
|
export default async function init(dbSettings: IDatabaseSettings): Promise<{ [key in Product]?: IProductData }> {
|
|
const output: { [key in Product]?: IProductData } = {};
|
|
|
|
await database.init(dbSettings);
|
|
|
|
//Only create table if it does not exist yet
|
|
const createIfNotExists = createStatement.replace(/^CREATE TABLE/, 'CREATE TABLE IF NOT EXISTS');
|
|
await database.query(createIfNotExists);
|
|
|
|
const { results: existingRows }: { results: IDatabaseRow[]} = await database.query('SELECT * FROM ssn_versions');
|
|
|
|
existingRows.forEach(function(row: IDatabaseRow) {
|
|
if (!products.includes(row.product)) {
|
|
writeLog(`Product ${row.product} in database table is invalid.`);
|
|
return;
|
|
}
|
|
|
|
output[row.product] = { http: row.http, manifest: row.manifest };
|
|
});
|
|
|
|
//If row does not exist, INSERT into table
|
|
const missingProducts = products.filter((product) => output[product] === undefined);
|
|
await Promise.all(missingProducts.map(function(product) {
|
|
output[product] = { http: -1, manifest: -1 };
|
|
const queryTemplate = `INSERT INTO \`ssn_versions\` (\`product\`, \`manifest\`, \`http\`) VALUES (?, '-1', '-1');`;
|
|
const query = mysql.format(queryTemplate, [String(product)]);
|
|
return database.query(query);
|
|
}));
|
|
|
|
return output;
|
|
}
|