import { returnFunc } from "../utils/returnHelper.utils.js"; import { connected, pool, reconnecting, reconnectToSql, } from "./prodSqlConnection.controller.js"; interface SqlError extends Error { code?: string; originalError?: { info?: { message?: string }; }; } /** * Run a prod query * just pass over the query as a string and the name of the query. * Query should be like below. * * select * from AlplaPROD_test1.dbo.table * You must use test1 always as it will be changed via query */ export const prodQuery = async (queryToRun: string, name: string) => { if (!connected) { reconnectToSql(); if (reconnecting) { return returnFunc({ success: false, level: "error", module: "system", subModule: "prodSql", message: `The sql ${process.env.PROD_PLANT_TOKEN} is trying to reconnect already`, data: [], notify: false, }); } else { return returnFunc({ success: false, level: "error", module: "system", subModule: "prodSql", message: `${process.env.PROD_PLANT_TOKEN} is not connected, and failed to connect.`, data: [], notify: true, }); } } //change to the correct server const query = queryToRun.replaceAll( "test1", `${process.env.PROD_PLANT_TOKEN}`, ); try { const result = await pool.request().query(query); return { success: true, message: `Query results for: ${name}`, data: result.recordset ?? [], }; } catch (error: unknown) { const err = error as SqlError; if (err.code === "ETIMEOUT") { return returnFunc({ success: false, module: "system", subModule: "prodSql", level: "error", message: `${name} did not run due to a timeout.`, notify: false, data: [], }); } if (err.code === "EREQUEST") { return returnFunc({ success: false, module: "system", subModule: "prodSql", level: "error", message: `${name} encountered an error ${err.originalError?.info?.message || "undefined error"}`, data: [], }); } return returnFunc({ success: false, module: "system", subModule: "prodSql", level: "error", message: `${name} encountered an unknown error.`, data: [], }); } };