From e73204424cbda9a5da72278c7ee0184f428055cd Mon Sep 17 00:00:00 2001 From: Cowch Date: Sun, 31 Aug 2025 21:36:31 -0500 Subject: [PATCH] test(prod sql): configs are set and basics init --- app/src/pkg/prodSql/prodSqlConfig.ts | 20 +++++++++++ app/src/pkg/prodSql/prodSqlConnect.ts | 48 +++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 app/src/pkg/prodSql/prodSqlConfig.ts create mode 100644 app/src/pkg/prodSql/prodSqlConnect.ts diff --git a/app/src/pkg/prodSql/prodSqlConfig.ts b/app/src/pkg/prodSql/prodSqlConfig.ts new file mode 100644 index 0000000..663e10d --- /dev/null +++ b/app/src/pkg/prodSql/prodSqlConfig.ts @@ -0,0 +1,20 @@ +import sql from "mssql"; +import { env } from "../utils/envValidator.js"; +export const sqlConfig: sql.config = { + server: env.PROD_SERVER, + database: `AlplaPROD_${env.PROD_PLANT_TOKEN}_cus`, + user: env.PROD_USER, + password: env.PROD_PASSWORD, + options: { + encrypt: true, + trustServerCertificate: true, + }, + requestTimeout: 90000, // in milliseconds + pool: { + max: 20, // Maximum number of connections in the pool + min: 0, // Minimum number of connections in the pool + idleTimeoutMillis: 10000, // How long a connection is allowed to be idle before being released + reapIntervalMillis: 1000, // how often to check for idle resourses to destory + acquireTimeoutMillis: 100000, // How long until a complete timeout happens + }, +}; diff --git a/app/src/pkg/prodSql/prodSqlConnect.ts b/app/src/pkg/prodSql/prodSqlConnect.ts new file mode 100644 index 0000000..636695c --- /dev/null +++ b/app/src/pkg/prodSql/prodSqlConnect.ts @@ -0,0 +1,48 @@ +import sql from "mssql"; +import { checkHostnamePort } from "../utils/checkHostNamePort.js"; +import { sqlConfig } from "./prodSqlConfig.js"; +import { env } from "../utils/envValidator.js"; +import { createLogger } from "../logger/logger.js"; + +let pool; +let connected: boolean = false; + +export const initializeProdPool = async () => { + const log = createLogger({ module: "prodSql" }); + + const serverUp = await checkHostnamePort(`${env.PROD_SERVER}:1433`); + + if (!serverUp) { + log.error(`The sql ${process.env.PROD_SERVER} is not reachable`); + return { + success: false, + message: `The sql ${env.PROD_SERVER} is not reachable`, + data: [], + }; + } + + // if you were restarting from the endpoint you get this lovely error + if (connected) { + log.error("There is already a connection."); + return { success: false, message: "There is already a connection." }; + } + try { + pool = sql.connect(sqlConfig); + + log.info( + `Connected to ${sqlConfig?.server}, and looking at ${sqlConfig?.database}` + ); + connected = true; + return { + success: true, + message: "The sql server connection has been closed", + }; + } catch (error) { + log.fatal( + `${JSON.stringify( + error + )}, "There was an error connecting to the pool."` + ); + // throw new Error("There was an error closing the sql connection"); + } +};