From a0179a41bac93d2a7320802e9d70aa966ed79ae4 Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Mon, 4 Aug 2025 12:48:49 -0500 Subject: [PATCH] refactor(migration progress): moved to start looking at the go backedn --- server/globalUtils/createSSCC.ts | 17 ++++--- server/globalUtils/createUrl.ts | 22 ++++---- server/index.ts | 23 ++++++--- server/scripts/updateServers.ts | 2 + .../controllers/userAdmin/updateUserAdm.ts | 5 +- .../controller/getDeliveryByDateRange.ts | 20 ++++---- .../dataMart/controller/getOpenOrders.ts | 23 +++++---- server/services/general/route/scalar.ts | 16 +++--- server/services/logger/goTransport.ts | 35 +++++++++++++ server/services/logger/logger.ts | 8 +++ server/services/logger/loggerService.ts | 15 +++--- server/services/sqlServer/prodSqlServer.ts | 50 +++++++++++++------ .../sqlServer/querys/dataMart/article.ts | 5 ++ .../sqlServer/utils/prodServerConfig.ts | 26 ++++++---- server/services/tcpServer/tcpServer.ts | 33 ++++++------ 15 files changed, 201 insertions(+), 99 deletions(-) create mode 100644 server/services/logger/goTransport.ts diff --git a/server/globalUtils/createSSCC.ts b/server/globalUtils/createSSCC.ts index 6107265..13497ae 100644 --- a/server/globalUtils/createSSCC.ts +++ b/server/globalUtils/createSSCC.ts @@ -1,16 +1,19 @@ -import { eq } from "drizzle-orm"; -import { db } from "../../database/dbclient.js"; -import { settings } from "../../database/schema/settings.js"; import { query } from "../services/sqlServer/prodSqlServer.js"; import { plantInfo } from "../services/sqlServer/querys/dataMart/plantInfo.js"; import { createLog } from "../services/logger/logger.js"; +import { getSettings } from "../services/server/controller/settings/getSettings.js"; export const createSSCC = async (runningNumber: number) => { // get the token - const plantToken = await db - .select() - .from(settings) - .where(eq(settings.name, "plantToken")); + + let serverSettings = (await getSettings()) as any; + const plantToken = serverSettings?.filter( + (n: any) => n.name === "plantToken" + ); + // const plantToken = await db + // .select() + // .from(settings) + // .where(eq(settings.name, "plantToken")); let global: any = []; // get from plant address in basis enter the entire string here. try { diff --git a/server/globalUtils/createUrl.ts b/server/globalUtils/createUrl.ts index 99931af..c253955 100644 --- a/server/globalUtils/createUrl.ts +++ b/server/globalUtils/createUrl.ts @@ -1,6 +1,7 @@ import { eq } from "drizzle-orm"; import { db } from "../../database/dbclient.js"; -import { settings } from "../../database/schema/settings.js"; + +import { getSettings } from "../services/server/controller/settings/getSettings.js"; // create the test server stuff const testServers = [ @@ -12,19 +13,22 @@ const testServers = [ export const prodEndpointCreation = async (endpoint: string) => { let url = ""; //get the plant token - const plantToken = await db - .select() - .from(settings) - .where(eq(settings.name, "plantToken")); + let serverSettings = await getSettings(); + const plantToken = serverSettings?.filter((n) => n.name === "plantToken"); + // await db + // .select() + // .from(settings) + // .where(eq(settings.name, "plantToken")); // check if we are a test server const testServer = testServers.some( (server) => server.token === plantToken[0]?.value ); - const server = await db - .select() - .from(settings) - .where(eq(settings.name, "dbServer")); + const server = serverSettings?.filter((n) => n.name === "dbServer"); + // await db + // .select() + // .from(settings) + // .where(eq(settings.name, "dbServer")); if (testServer) { //filter out what testserver we are diff --git a/server/index.ts b/server/index.ts index 1132c49..726c180 100644 --- a/server/index.ts +++ b/server/index.ts @@ -29,6 +29,11 @@ import eom from "./services/eom/eomService.js"; import dataMart from "./services/dataMart/dataMartService.js"; import qualityRequest from "./services/quality/qualityService.js"; import produser from "./services/prodUser/prodUser.js"; +import { + getSettings, + serverSettings, +} from "./services/server/controller/settings/getSettings.js"; +import type { Settings } from "./types/settings.js"; // create the main prodlogin here const username = "lst_user"; @@ -36,15 +41,16 @@ const password = "Alpla$$Prod"; export const lstAuth = btoa(`${username}:${password}`); // checking to make sure we have the settings intialized -const { data: settingsData, error: settingError } = await tryCatch( - db.select().from(settings) -); +// const { data: settingsData, error: settingError } = await tryCatch( +// db.select().from(settings) +// ); -if (settingError) { - throw Error("Error getting settings from the db. critical error."); -} +// if (settingError) { +// throw Error("Error getting settings from the db. critical error."); +// } + +const serverIntialized: any = await getSettings(); -const serverIntialized: any = settingsData; export const installed = serverIntialized.length === 0 && process.env.NODE_ENV !== "development" ? false @@ -211,7 +217,8 @@ serve( /** * Only for ocme until we get them switched over to the single port setup. */ -const setting = await db.select().from(settings); +// const setting = await db.select().from(settings); +const setting = serverSettings; const isActive = setting.filter((n) => n.name === "ocmeService"); if (ocmeport && isActive[0]?.value === "1") { serve( diff --git a/server/scripts/updateServers.ts b/server/scripts/updateServers.ts index b0ec951..3253503 100644 --- a/server/scripts/updateServers.ts +++ b/server/scripts/updateServers.ts @@ -4,6 +4,7 @@ import { db } from "../../database/dbclient.js"; import { serverData } from "../../database/schema/serverData.js"; import { eq, sql } from "drizzle-orm"; import { createLog } from "../services/logger/logger.js"; +import { serverSettings } from "../services/server/controller/settings/getSettings.js"; type UpdateServerResponse = { success: boolean; @@ -48,6 +49,7 @@ export const updateServer = async ( }; } + console.log(serverInfo); const scriptPath = `${process.env.DEVFOLDER}\\server\\scripts\\update.ps1 `; const args = [ "-NoProfile", diff --git a/server/services/auth/controllers/userAdmin/updateUserAdm.ts b/server/services/auth/controllers/userAdmin/updateUserAdm.ts index 9b97f0d..32f75ef 100644 --- a/server/services/auth/controllers/userAdmin/updateUserAdm.ts +++ b/server/services/auth/controllers/userAdmin/updateUserAdm.ts @@ -7,6 +7,7 @@ import { createPassword } from "../../utils/createPassword.js"; import { createLog } from "../../../logger/logger.js"; import { sendEmail } from "../../../notifications/controller/sendMail.js"; import { settings } from "../../../../../database/schema/settings.js"; +import { getSettings } from "../../../server/controller/settings/getSettings.js"; export const updateUserADM = async (userData: User) => { /** @@ -40,8 +41,8 @@ export const updateUserADM = async (userData: User) => { }; } - const { data: s, error: se } = await tryCatch(db.select().from(settings)); - + //const { data: s, error: se } = await tryCatch(db.select().from(settings)); + const { data: s, error: se } = await tryCatch(getSettings()); if (se) { return { success: false, diff --git a/server/services/dataMart/controller/getDeliveryByDateRange.ts b/server/services/dataMart/controller/getDeliveryByDateRange.ts index 9f8862b..3d014ad 100644 --- a/server/services/dataMart/controller/getDeliveryByDateRange.ts +++ b/server/services/dataMart/controller/getDeliveryByDateRange.ts @@ -7,16 +7,16 @@ import { deliveryByDateRange } from "../../sqlServer/querys/dataMart/deleveryByD import { addDays, format } from "date-fns"; export const getDeliveryByDateRange = async (data: any | null) => { - const { data: plantToken, error: plantError } = await tryCatch( - db.select().from(settings).where(eq(settings.name, "plantToken")) - ); - if (plantError) { - return { - success: false, - message: "Error getting Settings", - data: plantError, - }; - } + // const { data: plantToken, error: plantError } = await tryCatch( + // db.select().from(settings).where(eq(settings.name, "plantToken")) + // ); + // if (plantError) { + // return { + // success: false, + // message: "Error getting Settings", + // data: plantError, + // }; + // } let deliverys: any = []; let updatedQuery = deliveryByDateRange; diff --git a/server/services/dataMart/controller/getOpenOrders.ts b/server/services/dataMart/controller/getOpenOrders.ts index 890d4f3..0609043 100644 --- a/server/services/dataMart/controller/getOpenOrders.ts +++ b/server/services/dataMart/controller/getOpenOrders.ts @@ -4,18 +4,21 @@ import { settings } from "../../../../database/schema/settings.js"; import { tryCatch } from "../../../globalUtils/tryCatch.js"; import { query } from "../../sqlServer/prodSqlServer.js"; import { openOrders } from "../../sqlServer/querys/dataMart/openOrders.js"; +import { serverSettings } from "../../server/controller/settings/getSettings.js"; export const getOpenOrders = async (data: any | null) => { - const { data: plantToken, error: plantError } = await tryCatch( - db.select().from(settings).where(eq(settings.name, "plantToken")) - ); - if (plantError) { - return { - success: false, - message: "Error getting Settings", - data: plantError, - }; - } + // const { data: plantToken, error: plantError } = await tryCatch( + // db.select().from(settings).where(eq(settings.name, "plantToken")) + // ); + // if (plantError) { + // return { + // success: false, + // message: "Error getting Settings", + // data: plantError, + // }; + // } + + const plantToken = serverSettings.filter((n) => n.name === "plantToken"); let orders: any = []; let updatedQuery = openOrders; diff --git a/server/services/general/route/scalar.ts b/server/services/general/route/scalar.ts index 84a641b..6fad1b5 100644 --- a/server/services/general/route/scalar.ts +++ b/server/services/general/route/scalar.ts @@ -1,11 +1,13 @@ -import {OpenAPIHono} from "@hono/zod-openapi"; -import {apiReference} from "@scalar/hono-api-reference"; -import {settings} from "../../../../database/schema/settings.js"; -import {db} from "../../../../database/dbclient.js"; -import {eq} from "drizzle-orm"; +import { OpenAPIHono } from "@hono/zod-openapi"; +import { apiReference } from "@scalar/hono-api-reference"; +import { settings } from "../../../../database/schema/settings.js"; +import { db } from "../../../../database/dbclient.js"; +import { eq } from "drizzle-orm"; +import { getSettings } from "../../server/controller/settings/getSettings.js"; const app = new OpenAPIHono(); -const plantToken = await db.select().from(settings).where(eq(settings.name, "plantToken")); +const serverSettings = await getSettings(); +const plantToken = serverSettings.filter((n) => n.name === "plantToken") as any; //await db.select().from(settings).where(eq(settings.name, "plantToken")); let pToken = plantToken[0]?.value; const testServers = ["test1", "test2", "test3"]; @@ -17,7 +19,7 @@ app.get( apiReference({ theme: "kepler", layout: "classic", - defaultHttpClient: {targetKey: "node", clientKey: "axios"}, + defaultHttpClient: { targetKey: "node", clientKey: "axios" }, pageTitle: "Lst API Reference", hiddenClients: [ "libcurl", diff --git a/server/services/logger/goTransport.ts b/server/services/logger/goTransport.ts new file mode 100644 index 0000000..6de1f9b --- /dev/null +++ b/server/services/logger/goTransport.ts @@ -0,0 +1,35 @@ +// goTransport.js +import { pino } from "pino"; +import build from "pino-abstract-transport"; + +const pinoLogLevels: any = { + 10: "trace", + 20: "debug", + 30: "info", + 40: "warn", + 50: "error", + 60: "fatal", +}; + +export default async function buildGoTransport() { + try { + return build(async function (source) { + for await (let obj of source) { + // Insert log entry into the PostgreSQL database using Drizzle ORM + + // convert to the name to make it more easy to find later :P + const levelName = pinoLogLevels[obj.level] || "unknown"; + // await db.insert(logs).values({ + // level: levelName, + // username: obj?.username.toLowerCase(), + // service: obj?.service.toLowerCase(), + // message: obj.msg, + // }); + + console.log(`Go log level: ${levelName}`); + } + }); + } catch (err) { + console.error("Error inserting log into database:", err); + } +} diff --git a/server/services/logger/logger.ts b/server/services/logger/logger.ts index 9b94de6..4ec9853 100644 --- a/server/services/logger/logger.ts +++ b/server/services/logger/logger.ts @@ -18,6 +18,14 @@ const transport = pino.transport({ { target: "./dbTransport.js", }, + // Only log to Go if LST_USE_GO=true + ...(process.env.LST_USE_GO === "true" + ? [ + { + target: "./goTransport.js", // New transport for Go + }, + ] + : []), ], }); diff --git a/server/services/logger/loggerService.ts b/server/services/logger/loggerService.ts index a8ba17e..d8c7fd2 100644 --- a/server/services/logger/loggerService.ts +++ b/server/services/logger/loggerService.ts @@ -1,10 +1,10 @@ -import {OpenAPIHono} from "@hono/zod-openapi"; +import { OpenAPIHono } from "@hono/zod-openapi"; // routes import clearLog from "./routes/clearLog.js"; -import {db} from "../../../database/dbclient.js"; -import {settings} from "../../../database/schema/settings.js"; -import {logCleanup} from "./controller/logCleanup.js"; +import { db } from "../../../database/dbclient.js"; +import { settings } from "../../../database/schema/settings.js"; +import { logCleanup } from "./controller/logCleanup.js"; import createNewLog from "./routes/createLog.js"; import getLogs from "./routes/getLogs.js"; import stream from "./routes/streamLogs.js"; @@ -12,14 +12,17 @@ import stream from "./routes/streamLogs.js"; const app = new OpenAPIHono(); const routes = [clearLog, createNewLog, getLogs, stream] as const; -const setting = await db.select().from(settings); +//const setting = await db.select().from(settings); const appRoutes = routes.forEach((route) => { app.route("/logger", route); }); app.all("/logger/*", (c) => { - return c.json({success: false, message: "You have encounters a log route that dose not exist."}); + return c.json({ + success: false, + message: "You have encounters a log route that dose not exist.", + }); }); // run the clean up job ones on server restart/crash/update and then once a date diff --git a/server/services/sqlServer/prodSqlServer.ts b/server/services/sqlServer/prodSqlServer.ts index 08c47da..1d8e465 100644 --- a/server/services/sqlServer/prodSqlServer.ts +++ b/server/services/sqlServer/prodSqlServer.ts @@ -6,6 +6,7 @@ import { settings } from "../../../database/schema/settings.js"; import { eq } from "drizzle-orm"; import { installed } from "../../index.js"; import { checkHostnamePort } from "../../globalUtils/pingServer.js"; +import { serverSettings } from "../server/controller/settings/getSettings.js"; let pool: any; let connected: boolean = false; @@ -23,10 +24,16 @@ export const initializeProdPool = async () => { return { success: false, message: "The server is not installed." }; } - const dbServer = await db - .select() - .from(settings) - .where(eq(settings.name, "dbServer")); + // const dbServer = await db + // .select() + // .from(settings) + // .where(eq(settings.name, "dbServer")); + + // the move to the go version for settings + const dbServer = serverSettings.filter( + (n: any) => n.name === "dbServer" + ) as any; + const serverUp = await checkHostnamePort(`${dbServer[0].value}:1433`); if (!serverUp) { @@ -44,10 +51,14 @@ export const initializeProdPool = async () => { } // make sure the server is not set to localhost this will prevent some weird issues later but can be localhost on the dev - const serverLoc = await db - .select() - .from(settings) - .where(eq(settings.name, "dbServer")); + // const serverLoc = await db + // .select() + // .from(settings) + // .where(eq(settings.name, "dbServer")); + + const serverLoc = serverSettings.filter( + (n: any) => n.name === "dbServer" + ) as any; if ( serverLoc[0].value === "localhost" && process.env.NODE_ENV !== "development" @@ -134,10 +145,14 @@ export async function query(queryToRun: string, name: string) { /** * Just an extra catch incase someone tried to run a query while we were not connected to the server or sql server */ - const dbServer = await db - .select() - .from(settings) - .where(eq(settings.name, "dbServer")); + // const dbServer = await db + // .select() + // .from(settings) + // .where(eq(settings.name, "dbServer")); + + const dbServer = serverSettings.filter( + (n: any) => n.name === "dbServer" + ) as any; const serverUp = await checkHostnamePort(`${dbServer[0].value}:1433`); if (!serverUp) { @@ -170,10 +185,13 @@ export async function query(queryToRun: string, name: string) { /** * We no longer need to send over the plant token change as we do it inside the query function. */ - const plantToken = await db - .select() - .from(settings) - .where(eq(settings.name, "plantToken")); + // const plantToken = await db + // .select() + // .from(settings) + // .where(eq(settings.name, "plantToken")); + const plantToken = serverSettings.filter( + (n: any) => n.name === "plantToken" + ) as any; const query = queryToRun.replaceAll("test1", plantToken[0].value); try { diff --git a/server/services/sqlServer/querys/dataMart/article.ts b/server/services/sqlServer/querys/dataMart/article.ts index e24f64f..4a42127 100644 --- a/server/services/sqlServer/querys/dataMart/article.ts +++ b/server/services/sqlServer/querys/dataMart/article.ts @@ -38,6 +38,11 @@ V_Artikel.ArtikelvariantenTypBez = 'Glue' or V_Artikel.ArtikelvariantenTypBez = 'Top Frame' or V_Artikel.ArtikelvariantenTypBez = 'IML Label' or V_Artikel.ArtikelvariantenTypBez = 'Purch EBM Bottle' or +V_Artikel.ArtikelvariantenTypBez = 'Purchased Spout' or +V_Artikel.ArtikelvariantenTypBez = 'Gaylord' or +V_Artikel.ArtikelvariantenTypBez = 'Misc. Packaging' or +V_Artikel.ArtikelvariantenTypBez = 'Sleeve' or +V_Artikel.ArtikelvariantenTypBez = 'Plastic Bag' or V_Artikel.ArtikelvariantenTypBez = 'Purch Spout' THEN 'PKG' WHEN V_Artikel.ArtikelvariantenTypBez='HD-PE' or diff --git a/server/services/sqlServer/utils/prodServerConfig.ts b/server/services/sqlServer/utils/prodServerConfig.ts index 1c9d957..bd3cd38 100644 --- a/server/services/sqlServer/utils/prodServerConfig.ts +++ b/server/services/sqlServer/utils/prodServerConfig.ts @@ -1,16 +1,22 @@ -import {db} from "../../../../database/dbclient.js"; -import {settings} from "../../../../database/schema/settings.js"; -import {createLog} from "../../logger/logger.js"; +import { db } from "../../../../database/dbclient.js"; +import { settings } from "../../../../database/schema/settings.js"; +import { createLog } from "../../logger/logger.js"; +import { serverSettings } from "../../server/controller/settings/getSettings.js"; export const prodSqlConfig = async () => { try { - const serverSetting = await db.select().from(settings); + //const serverSetting = await db.select().from(settings); + const serverSetting = serverSettings as any; // create dummy type data - const server = serverSetting.filter((s) => s.name === "dbServer"); - const plantToken = serverSetting.filter((s) => s.name === "plantToken"); - const dbUser = serverSetting.filter((s) => s.name === "dbUser"); + const server = serverSetting.filter((s: any) => s.name === "dbServer"); + const plantToken = serverSetting.filter( + (s: any) => s.name === "plantToken" + ); + const dbUser = serverSetting.filter((s: any) => s.name === "dbUser"); // if erroring out double check the password was actually encoded before saving - const dbPassword = serverSetting.filter((s) => s.name === "dbPass"); + const dbPassword = serverSetting.filter( + (s: any) => s.name === "dbPass" + ); const sqlConfig = { server: server[0].value, @@ -37,7 +43,9 @@ export const prodSqlConfig = async () => { "info", "lst", "sqlProd", - `${JSON.stringify(error)} "There was an error getting/setting up the config for the prod sql server."` + `${JSON.stringify( + error + )} "There was an error getting/setting up the config for the prod sql server."` ); } }; diff --git a/server/services/tcpServer/tcpServer.ts b/server/services/tcpServer/tcpServer.ts index 96b5628..be727e1 100644 --- a/server/services/tcpServer/tcpServer.ts +++ b/server/services/tcpServer/tcpServer.ts @@ -10,6 +10,7 @@ import { settings } from "../../../database/schema/settings.js"; import { eq } from "drizzle-orm"; import { postLabelData } from "../ocme/controller/postRunningNr.js"; import { tryCatch } from "../../globalUtils/tryCatch.js"; +import { serverSettings } from "../server/controller/settings/getSettings.js"; let tcpServer: net.Server; let tcpSockets: Set = new Set(); @@ -18,31 +19,33 @@ let isServerRunning = false; /** * add in proper logging */ -const tcpPort = await db - .select() - .from(settings) - .where(eq(settings.name, "tcpPort")); +// const tcpPort = await db +// .select() +// .from(settings) +// .where(eq(settings.name, "tcpPort")); + const app = new OpenAPIHono(); export const startTCPServer = () => { + const tcpPort = serverSettings.filter((n) => n.name === "tcpPort"); if (isServerRunning) return { success: false, message: "Server is already running" }; tcpServer = net.createServer(async (socket) => { createLog("debug", "tcp", "tcp", "Client connected"); - const { data: setting, error: settingError } = await tryCatch( - db.select().from(settings) - ); - if (settingError) { - return { - success: false, - message: "Error getting settings", - data: [], - }; - } + // const { data: setting, error: settingError } = await tryCatch( + // db.select().from(settings) + // ); + // if (settingError) { + // return { + // success: false, + // message: "Error getting settings", + // data: [], + // }; + // } - const settingCheck = setting.filter( + const settingCheck = serverSettings.filter( (newData) => newData.name === "ocmeService" );