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; }