From 99b2d762d6b14aadec3c280f3415b5a196b11c50 Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Wed, 29 Oct 2025 21:57:11 -0500 Subject: [PATCH] refactor(modules): moved modules to app to control everything based on there active setting --- .vscode/settings.json | 1 + .../app/admin/User/Get roles.bru | 8 +- .../app/auth/Login.bru | 4 +- .../app/system/modules/GetModules.bru | 16 + .../app/system/modules/Update Modules.bru | 28 + .../app/system/modules/folder.bru | 8 + .../environments/lst.bru | 2 +- app/main.ts | 2 + .../admin/routes/servers/serverRoutes.ts | 38 +- app/src/internal/auth/routes/register.ts | 12 +- .../system/controller/modules/baseModules.ts | 36 + .../system/controller/modules/modules.json | 132 +- app/src/internal/system/routes.ts | 5 + .../system/routes/modules/getModules.ts | 36 + .../system/routes/modules/moduleRoutes.ts | 15 + .../system/routes/modules/updateModules.ts | 131 ++ app/src/pkg/db/schema/modules.ts | 42 + .../src/lib/providers/SessionProvider.tsx | 3 - .../_app/(auth)/-components/LoginForm.tsx | 2 +- .../_app/(auth)/-components/SignupForm.tsx | 11 +- .../old/-components/layout/lst-sidebar.tsx | 11 +- .../layout/side-components/logistics.tsx | 24 +- .../layout/side-components/production.tsx | 72 +- .../routes/_old/old/-components/ocp/Lots.tsx | 1 + .../_old/old/-lib/store/useModuleStore.ts | 2 +- .../src/routes/_old/old/-types/modules.ts | 33 +- .../services/sqlServer/querys/ocp/lots.ts | 2 + migrations/0021_motionless_ezekiel.sql | 23 + migrations/0022_old_next_avengers.sql | 1 + migrations/0023_minor_marvel_zombies.sql | 2 + migrations/meta/0021_snapshot.json | 1721 ++++++++++++++++ migrations/meta/0022_snapshot.json | 1727 ++++++++++++++++ migrations/meta/0023_snapshot.json | 1739 +++++++++++++++++ migrations/meta/_journal.json | 21 + scripts/lstAppMoves.mjs | 17 + 35 files changed, 5807 insertions(+), 121 deletions(-) create mode 100644 LogisticsSupportTool_API_DOCS/app/system/modules/GetModules.bru create mode 100644 LogisticsSupportTool_API_DOCS/app/system/modules/Update Modules.bru create mode 100644 LogisticsSupportTool_API_DOCS/app/system/modules/folder.bru create mode 100644 app/src/internal/system/routes/modules/getModules.ts create mode 100644 app/src/internal/system/routes/modules/moduleRoutes.ts create mode 100644 app/src/internal/system/routes/modules/updateModules.ts create mode 100644 app/src/pkg/db/schema/modules.ts create mode 100644 migrations/0021_motionless_ezekiel.sql create mode 100644 migrations/0022_old_next_avengers.sql create mode 100644 migrations/0023_minor_marvel_zombies.sql create mode 100644 migrations/meta/0021_snapshot.json create mode 100644 migrations/meta/0022_snapshot.json create mode 100644 migrations/meta/0023_snapshot.json diff --git a/.vscode/settings.json b/.vscode/settings.json index 7fee58f..6701835 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,6 +8,7 @@ "source.organizeImports.biome": "explicit" }, "cSpell.words": [ + "acitve", "alpla", "alplamart", "alplaprod", diff --git a/LogisticsSupportTool_API_DOCS/app/admin/User/Get roles.bru b/LogisticsSupportTool_API_DOCS/app/admin/User/Get roles.bru index 91de1ce..2c839c8 100644 --- a/LogisticsSupportTool_API_DOCS/app/admin/User/Get roles.bru +++ b/LogisticsSupportTool_API_DOCS/app/admin/User/Get roles.bru @@ -4,16 +4,12 @@ meta { seq: 7 } -patch { - url: {{url}}/lst/api/admin/users/:userID/grant +get { + url: {{url}}/lst/api/user/roles body: json auth: inherit } -params:path { - userID: 0hlO48C7Jw1J804FxrCnonKjQ2zh48R6 -} - body:json { { "module":"siloAdjustments", diff --git a/LogisticsSupportTool_API_DOCS/app/auth/Login.bru b/LogisticsSupportTool_API_DOCS/app/auth/Login.bru index 2e4b1fa..df9b5a5 100644 --- a/LogisticsSupportTool_API_DOCS/app/auth/Login.bru +++ b/LogisticsSupportTool_API_DOCS/app/auth/Login.bru @@ -12,8 +12,8 @@ post { body:json { { - "username": "cowch", - "password": "Alpla2025!" + "username": "matthes01", + "password": "nova0511" } } diff --git a/LogisticsSupportTool_API_DOCS/app/system/modules/GetModules.bru b/LogisticsSupportTool_API_DOCS/app/system/modules/GetModules.bru new file mode 100644 index 0000000..40a7f90 --- /dev/null +++ b/LogisticsSupportTool_API_DOCS/app/system/modules/GetModules.bru @@ -0,0 +1,16 @@ +meta { + name: GetModules + type: http + seq: 3 +} + +get { + url: {{url}}/lst/api/system/modules + body: none + auth: inherit +} + +settings { + encodeUrl: true + timeout: 0 +} diff --git a/LogisticsSupportTool_API_DOCS/app/system/modules/Update Modules.bru b/LogisticsSupportTool_API_DOCS/app/system/modules/Update Modules.bru new file mode 100644 index 0000000..2d89157 --- /dev/null +++ b/LogisticsSupportTool_API_DOCS/app/system/modules/Update Modules.bru @@ -0,0 +1,28 @@ +meta { + name: Update Modules + type: http + seq: 2 +} + +patch { + url: {{url}}/lst/api/system/modules/update/:module + body: json + auth: inherit +} + +params:path { + module: materialHelper +} + +body:json { + { + "active": true, + "updateAll": true + + } +} + +settings { + encodeUrl: true + timeout: 0 +} diff --git a/LogisticsSupportTool_API_DOCS/app/system/modules/folder.bru b/LogisticsSupportTool_API_DOCS/app/system/modules/folder.bru new file mode 100644 index 0000000..e4f5fc6 --- /dev/null +++ b/LogisticsSupportTool_API_DOCS/app/system/modules/folder.bru @@ -0,0 +1,8 @@ +meta { + name: modules + seq: 3 +} + +auth { + mode: inherit +} diff --git a/LogisticsSupportTool_API_DOCS/environments/lst.bru b/LogisticsSupportTool_API_DOCS/environments/lst.bru index e1d91e8..fd387a9 100644 --- a/LogisticsSupportTool_API_DOCS/environments/lst.bru +++ b/LogisticsSupportTool_API_DOCS/environments/lst.bru @@ -1,5 +1,5 @@ vars { - url: http://localhost:4200 + url: https://usmcd1vms036.alpla.net session_cookie: urlv2: http://localhost:3000 jwtV2: diff --git a/app/main.ts b/app/main.ts index a63196a..46b11a9 100644 --- a/app/main.ts +++ b/app/main.ts @@ -13,6 +13,7 @@ import { userMigrate } from "./src/internal/auth/controller/userMigrate.js"; import { schedulerManager } from "./src/internal/logistics/controller/schedulerManager.js"; import { printers } from "./src/internal/ocp/printers/printers.js"; import { setupRoutes } from "./src/internal/routerHandler/routeHandler.js"; +import { baseModules } from "./src/internal/system/controller/modules/baseModules.js"; import { baseSettings } from "./src/internal/system/controller/settings/baseSettings.js"; import { auth } from "./src/pkg/auth/auth.js"; import { db } from "./src/pkg/db/db.js"; @@ -184,6 +185,7 @@ const main = async () => { // start all systems after we are intiallally up and running setTimeout(() => { baseSettings(); + baseModules(); printers(); schedulerManager(); diff --git a/app/src/internal/admin/routes/servers/serverRoutes.ts b/app/src/internal/admin/routes/servers/serverRoutes.ts index fa1e3d5..3a4fbd1 100644 --- a/app/src/internal/admin/routes/servers/serverRoutes.ts +++ b/app/src/internal/admin/routes/servers/serverRoutes.ts @@ -1,32 +1,34 @@ import { Router } from "express"; +import { requireAuth } from "../../../../pkg/middleware/authMiddleware.js"; +import { restrictToHosts } from "../../../../pkg/middleware/restrictToHosts.js"; import addServer from "./addServer.js"; import getServers from "./getServers.js"; import updateServer from "./updateServer.js"; -import { restrictToHosts } from "../../../../pkg/middleware/restrictToHosts.js"; -import { requireAuth } from "../../../../pkg/middleware/authMiddleware.js"; const router = Router(); router.use("/", getServers); router.use( - "/", - requireAuth("user", ["systemAdmin", "admin"]), - restrictToHosts([ - "usmcd1vms036.alpla.net", - "USMCD1VMS036.alpla.net", - "https://usmcd1vms036.alpla.net", - ]), - addServer + "/", + requireAuth("user", ["systemAdmin", "admin"]), + restrictToHosts([ + "localhost:5500", + "usmcd1vms036.alpla.net", + "USMCD1VMS036.alpla.net", + "https://usmcd1vms036.alpla.net", + ]), + addServer, ); router.use( - "/", - requireAuth("user", ["systemAdmin", "admin"]), - restrictToHosts([ - "usmcd1vms036.alpla.net", - "USMCD1VMS036.alpla.net", - "https://usmcd1vms036.alpla.net", - ]), - updateServer + "/", + requireAuth("user", ["systemAdmin", "admin"]), + restrictToHosts([ + "localhost:5500", + "usmcd1vms036.alpla.net", + "USMCD1VMS036.alpla.net", + "https://usmcd1vms036.alpla.net", + ]), + updateServer, ); export default router; diff --git a/app/src/internal/auth/routes/register.ts b/app/src/internal/auth/routes/register.ts index 719e03c..775b208 100644 --- a/app/src/internal/auth/routes/register.ts +++ b/app/src/internal/auth/routes/register.ts @@ -42,8 +42,12 @@ router.post("/", async (req: Request, res: Response) => { .update(user) .set({ lastLogin: sql`NOW()` }) .where(eq(user.id, newUser.user.id)); - return res.status(201).json(user); + + return res + .status(201) + .json({ success: true, message: "User created", data: newUser }); } catch (err) { + console.log(err); if (err instanceof z.ZodError) { const flattened = z.flattenError(err); return res.status(400).json({ @@ -59,6 +63,12 @@ router.post("/", async (req: Request, res: Response) => { error: err.status, }); } + + return res.status(200).json({ + success: false, + message: "There was an error creating your user.", + error: err, + }); } }); diff --git a/app/src/internal/system/controller/modules/baseModules.ts b/app/src/internal/system/controller/modules/baseModules.ts index 657e707..d96faa5 100644 --- a/app/src/internal/system/controller/modules/baseModules.ts +++ b/app/src/internal/system/controller/modules/baseModules.ts @@ -1,10 +1,46 @@ +import { sql } from "drizzle-orm"; import { readFileSync } from "fs"; import path from "path"; import { fileURLToPath } from "url"; +import { db } from "../../../../pkg/db/db.js"; +import { modules } from "../../../../pkg/db/schema/modules.js"; +import { createLogger } from "../../../../pkg/logger/logger.js"; +import { tryCatch } from "../../../../pkg/utils/tryCatch.js"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); export const baseModules = async () => { + const log = createLogger({ module: "system", subModule: "base modules" }); const modulePath = path.resolve(__dirname, "./modules.json"); + const newModules = JSON.parse(readFileSync(modulePath, "utf-8")); + + for (const m of newModules) { + const { data, error } = await tryCatch( + db + .insert(modules) + .values(m) + .onConflictDoUpdate({ + target: modules.name, + set: { + category: m.category, + link: m.link, + icon: m.icon, + roles: m.roles, + upd_date: sql`NOW()`, + upd_user: "LST-user", + }, + }) + .returning({ name: modules.name }), + ); + + if (error) { + console.log(error); + log.error({ error }, "There was an error adding new settings"); + } + + if (data) { + log.info({ newModulesAdded: data }, "New settings added"); + } + } }; diff --git a/app/src/internal/system/controller/modules/modules.json b/app/src/internal/system/controller/modules/modules.json index 7fddd2d..18a8fef 100644 --- a/app/src/internal/system/controller/modules/modules.json +++ b/app/src/internal/system/controller/modules/modules.json @@ -1,30 +1,122 @@ [ { - "name": "plantToken", - "value": "test3", - "description": "The plant token for the plant IE: test3 or usday1", - "moduleName": "system", - "roles": ["systemAdmin"] + "name": "users", + "category": "admin", + "icon": "User", + "link": "/lst/app/admin/users", + "active": true, + "roles": ["systemAdmin", "admin"] }, { - "name": "dbServer", - "value": "usmcd1vms036", - "description": "What is the db server", - "moduleName": "system", - "roles": ["systemAdmin"] + "name": "system", + "category": "admin", + "icon": "MonitorCog", + "link": "/lst/app/system", + "active": true, + "roles": ["systemAdmin", "admin"] }, { - "name": "v1Server", - "value": "localhost", - "description": "What is the port the v1app is on", - "moduleName": "system", - "roles": ["systemAdmin"] + "name": "ocp", + "category": "production", + "icon": "Printer", + "link": "/lst/app/old/ocp", + "active": true, + "roles": ["viewer", "manager", "tester", "systemAdmin", "admin"] }, { - "name": "v1Port", - "value": "3000", - "description": "What is the port the v1app is on", - "moduleName": "system", - "roles": ["systemAdmin"] + "name": "rfidReaders", + "category": "production", + "icon": "Tags", + "link": "/lst/app/old/rfid", + "active": false, + "roles": ["viewer", "manager", "tester", "systemAdmin", "admin"] + }, + { + "name": "ocmeCycleCounts", + "category": "ocme", + "icon": "Package", + "link": "/lst/app/old/ocme/cyclecount", + "active": false, + "roles": ["manager", "tester", "systemAdmin", "admin"] + }, + { + "name": "siloAdjustments", + "category": "logistics", + "icon": "Database", + "link": "/lst/app/old/siloAdjustments", + "active": true, + "roles": ["manager", "admin", "tester", "systemAdmin"] + }, + { + "name": "demandManagement", + "category": "logistics", + "icon": "Truck", + "link": "/lst/app/old/dm", + "active": true, + "roles": ["manager", "admin", "tester", "systemAdmin"] + }, + { + "name": "logistics", + "category": "logistics", + "icon": "", + "link": "/lst/app/old", + "active": false, + "roles": ["admin", "systemAdmin", "manager", "viewer", "tester"] + }, + { + "name": "helperCommands", + "category": "logistics", + "icon": "Package", + "link": "/lst/app/old/helperCommands", + "active": true, + "roles": ["admin", "systemAdmin", "manager", "viewer", "tester"] + }, + { + "name": "materialHelper", + "category": "logistics", + "active": true, + "icon": "Package", + "link": "/lst/app/old/materialHelper/consumption", + "roles": ["admin", "systemAdmin", "manager", "viewer", "tester"] + }, + { + "name": "openOrders", + "category": "logistics", + "active": true, + "icon": "Truck", + "link": "/lst/app/old/openOrders", + "roles": ["admin", "systemAdmin", "manager", "viewer", "tester"] + }, + { + "name": "production", + "category": "production", + "active": false, + "icon": "", + "link": "", + "roles": ["admin", "systemAdmin", "manager", "viewer", "tester"] + }, + { + "name": "quality", + "category": "quality", + "active": false, + "icon": "", + "link": "", + "roles": ["admin", "systemAdmin", "manager", "viewer", "tester"] + }, + { + "name": "eom", + "category": "logistics", + "active": true, + "icon": "", + "link": "/lst/app/old/eom", + "roles": ["admin", "systemAdmin", "manager", "tester"] + }, + { + "name": "forklifts", + "category": "logistics", + "active": false, + "icon": "", + "link": "/lst/app/old/forklifts", + "roles": ["admin", "systemAdmin", "manager", "tester"] } ] diff --git a/app/src/internal/system/routes.ts b/app/src/internal/system/routes.ts index db41aff..5c008de 100644 --- a/app/src/internal/system/routes.ts +++ b/app/src/internal/system/routes.ts @@ -1,4 +1,5 @@ import type { Express, Request, Response } from "express"; +import modules from "./routes/modules/moduleRoutes.js"; import settings from "./routes/settings/settingRoutes.js"; import stats from "./routes/stats.js"; @@ -9,4 +10,8 @@ export const setupSystemRoutes = (app: Express, basePath: string) => { basePath + "/api/system/settings", // will pass bc system admin but this is just telling us we need this settings, ); + app.use( + basePath + "/api/system/modules", // will pass bc system admin but this is just telling us we need this + modules, + ); }; diff --git a/app/src/internal/system/routes/modules/getModules.ts b/app/src/internal/system/routes/modules/getModules.ts new file mode 100644 index 0000000..22e8926 --- /dev/null +++ b/app/src/internal/system/routes/modules/getModules.ts @@ -0,0 +1,36 @@ +import { and, asc, eq } from "drizzle-orm"; +import type { Request, Response } from "express"; +import { Router } from "express"; +import { db } from "../../../../pkg/db/db.js"; +import { modules } from "../../../../pkg/db/schema/modules.js"; +import { serverData } from "../../../../pkg/db/schema/servers.js"; +import { tryCatch } from "../../../../pkg/utils/tryCatch.js"; + +const router = Router(); + +router.get("/", async (req: Request, res: Response) => { + // const token = req.query.token; + + // const conditions = []; + + // if (token !== undefined) { + // conditions.push(eq(serverData.plantToken, `${token}`)); + // } + + //conditions.push(eq(serverData.active, true)); + + const { data, error } = await tryCatch( + db + .select() + .from(modules) + //.where(and(...conditions)) + .orderBy(asc(modules.name)), + ); + + if (error) { + return res.status(400).json({ error: error }); + } + res.status(200).json({ message: "Current modules", data: data }); +}); + +export default router; diff --git a/app/src/internal/system/routes/modules/moduleRoutes.ts b/app/src/internal/system/routes/modules/moduleRoutes.ts new file mode 100644 index 0000000..4cd291f --- /dev/null +++ b/app/src/internal/system/routes/modules/moduleRoutes.ts @@ -0,0 +1,15 @@ +import { Router } from "express"; +import { requireAuth } from "../../../../pkg/middleware/authMiddleware.js"; +import getModules from "./getModules.js"; +import updateModules from "./updateModules.js"; + +const router = Router(); + +router.use("/", getModules); +router.use( + "/update", + requireAuth("system", ["systemAdmin", "admin"]), + updateModules, +); + +export default router; diff --git a/app/src/internal/system/routes/modules/updateModules.ts b/app/src/internal/system/routes/modules/updateModules.ts new file mode 100644 index 0000000..8a8c9b4 --- /dev/null +++ b/app/src/internal/system/routes/modules/updateModules.ts @@ -0,0 +1,131 @@ +import axios from "axios"; +import { eq, sql } from "drizzle-orm"; +import type { Request, Response } from "express"; +import { Router } from "express"; +import https from "https"; +import { db } from "../../../../pkg/db/db.js"; +import { modules } from "../../../../pkg/db/schema/modules.js"; +import { serverData } from "../../../../pkg/db/schema/servers.js"; +import { createLogger } from "../../../../pkg/logger/logger.js"; +import { tryCatch } from "../../../../pkg/utils/tryCatch.js"; + +const router = Router(); + +router.patch("/:module", async (req: Request, res: Response) => { + const log = createLogger({ module: "admin", subModule: "update module" }); + + // when a server is updated and is posted from localhost or 127.0.0.1 we also want to post it to the test server so we can see it from there, we want to insert with update on conflict. + const module = req.params.module; + const updates: Record = {}; + + if (req.body?.active !== undefined) { + updates.active = req.body.active; + } + + if (req.body?.icon !== undefined) { + updates.icon = req.body.icon; + } + + if (req.body?.link !== undefined) { + updates.link = req.body.link; + } + + updates.upd_user = req.user!.username || "lst_user"; + updates.upd_date = sql`NOW()`; + + try { + if (Object.keys(updates).length > 0) { + await db.update(modules).set(updates).where(eq(modules.name, module)); + } + + // if we pass updateAll:true then we want to update all servers this will help kill all bad stuff if we have it. + + if (req.body?.updateAll) { + const { data: serverInfo, error: errorData } = await tryCatch( + db.select().from(serverData), + ); + + if (errorData) { + log.error( + { error: errorData }, + "There was an error getting the serverData", + ); + return; + } + + for (const s of serverInfo) { + try { + const url = s.plantToken.includes("test") + ? `https://${s.serverDNS}.alpla.net` + : `https://${s.plantToken}prod.alpla.net`; + const axiosInstance = axios.create({ + httpsAgent: new https.Agent({ rejectUnauthorized: false }), + withCredentials: true, + }); + + const loginRes = (await axiosInstance.post( + `${url}/lst/api/auth/sign-in/username`, + { + username: process.env.MAIN_SERVER_USERNAME, + password: process.env.MAIN_SERVER_PASSWORD, + }, + { + headers: { "Content-Type": "application/json" }, + }, + )) as any; + + const setCookie = loginRes?.headers["set-cookie"][0]; + + //console.log(setCookie.split(";")[0].replace("__Secure-", "")); + + if (!setCookie) { + throw new Error("Did not receive a Set-Cookie header from login"); + } + + const { data, error } = await tryCatch( + axios.patch(`${url}/lst/api/system/modules/${module}`, updates, { + headers: { + "Content-Type": "application/json", + Cookie: setCookie.split(";")[0], + }, + withCredentials: true, + }), + ); + + if (error) { + //console.log(error); + log.error( + { stack: error }, + "There was an error updating the system", + ); + return res.status(400).json({ + message: `${module} encountered an error updating on the servers`, + }); + } + log.info({ stack: data?.data }, "module was just updated."); + + return res + .status(200) + .json({ message: `${module} was just updated on all servers` }); + } catch (e) { + log.error( + { error: e }, + `There was an error updating the module setting on ${s.name}`, + ); + return res.status(400).json({ + message: `${module} encountered an error updating on the servers`, + }); + } + } + } else { + return res + .status(200) + .json({ message: `${module}, was just updated to this server only` }); + } + } catch (error) { + console.log(error); + res.status(400).json({ message: "Error Server updated", error }); + } +}); + +export default router; diff --git a/app/src/pkg/db/schema/modules.ts b/app/src/pkg/db/schema/modules.ts new file mode 100644 index 0000000..9dc8856 --- /dev/null +++ b/app/src/pkg/db/schema/modules.ts @@ -0,0 +1,42 @@ +import { + boolean, + jsonb, + pgTable, + text, + timestamp, + uniqueIndex, + uuid, +} from "drizzle-orm/pg-core"; +import { createSelectSchema } from "drizzle-zod"; +//import {z} from "zod"; + +export const modules = pgTable( + "modules", + { + module_id: uuid("module_id").defaultRandom().primaryKey(), + name: text("name").notNull(), + active: boolean("active").default(false), + category: text("category"), + icon: text("icon"), + link: text("link"), + //roles: text("roles").notNull().default(`["view", "systemAdmin"]`), // ["view", "technician", "supervisor","manager", "admin","systemAdmin"] + roles: jsonb("roles").notNull().default(["view", "systemAdmin"]), // ["view", "technician", "supervisor","manager", "admin","systemAdmin"] + add_User: text("add_User").default("LST_System").notNull(), + add_Date: timestamp("add_Date").defaultNow(), + upd_user: text("upd_User").default("LST_System").notNull(), + upd_date: timestamp("upd_date").defaultNow(), + }, + (table) => [ + // uniqueIndex('emailUniqueIndex').on(sql`lower(${table.email})`), + uniqueIndex("module_name").on(table.name), + ], +); + +// Schema for inserting a user - can be used to validate API requests +// export const insertModuleSchema = createInsertSchema(modules, { +// name: z.string().min(3, {message: "Module name should be longer than 3 letters"}), +// }); +// Schema for selecting a Expenses - can be used to validate API responses +export const selectModuleSchema = createSelectSchema(modules); + +export type Modules = typeof modules; diff --git a/frontend/src/lib/providers/SessionProvider.tsx b/frontend/src/lib/providers/SessionProvider.tsx index b8488c1..05f3d3d 100644 --- a/frontend/src/lib/providers/SessionProvider.tsx +++ b/frontend/src/lib/providers/SessionProvider.tsx @@ -2,7 +2,6 @@ import { useRouter } from "@tanstack/react-router"; import { useEffect } from "react"; import { useModuleStore } from "../../routes/_old/old/-lib/store/useModuleStore"; import { useSettingStore } from "../../routes/_old/old/-lib/store/useSettings"; -import { useSubModuleStore } from "../../routes/_old/old/-lib/store/useSubModuleStore"; import { useSession, useUserRoles } from "../authClient"; export function SessionGuard({ children }: { children: React.ReactNode }) { @@ -10,7 +9,6 @@ export function SessionGuard({ children }: { children: React.ReactNode }) { const { fetchRoles } = useUserRoles(); const { fetchModules } = useModuleStore(); const { fetchSettings } = useSettingStore(); - const { fetchSubModules } = useSubModuleStore(); const router = useRouter(); useEffect(() => { @@ -19,7 +17,6 @@ export function SessionGuard({ children }: { children: React.ReactNode }) { // } fetchModules(); fetchSettings(); - fetchSubModules(); //if (session) { fetchRoles(); //} diff --git a/frontend/src/routes/_app/(auth)/-components/LoginForm.tsx b/frontend/src/routes/_app/(auth)/-components/LoginForm.tsx index 407dc21..0b06c00 100644 --- a/frontend/src/routes/_app/(auth)/-components/LoginForm.tsx +++ b/frontend/src/routes/_app/(auth)/-components/LoginForm.tsx @@ -36,7 +36,7 @@ export default function LoginForm({ redirectPath }: { redirectPath: string }) { try { await axios.post("/lst/api/user/login", { - username: value.username, + username: value.username.toLowerCase(), password: value.password, }); diff --git a/frontend/src/routes/_app/(auth)/-components/SignupForm.tsx b/frontend/src/routes/_app/(auth)/-components/SignupForm.tsx index 523a379..888f417 100644 --- a/frontend/src/routes/_app/(auth)/-components/SignupForm.tsx +++ b/frontend/src/routes/_app/(auth)/-components/SignupForm.tsx @@ -1,4 +1,4 @@ -import { Link } from "@tanstack/react-router"; +import { Link, useNavigate } from "@tanstack/react-router"; import { toast } from "sonner"; import { CardContent, @@ -11,6 +11,7 @@ import { useAppForm } from "@/lib/formStuff"; import { LstCard } from "@/routes/_old/old/-components/extendedUi/LstCard"; export default function SignupForm() { + const navigate = useNavigate(); const form = useAppForm({ defaultValues: { username: "", @@ -31,7 +32,13 @@ export default function SignupForm() { password: value.password, }); - if (res.status === 200) { + if (!res.data.success) { + toast.error(res.data.message); + } + + if (res.data.success) { + form.reset(); + navigate({ to: "/" }); toast.success(`Welcome ${value.username}, to lst.`); } } catch (error) { diff --git a/frontend/src/routes/_old/old/-components/layout/lst-sidebar.tsx b/frontend/src/routes/_old/old/-components/layout/lst-sidebar.tsx index 14212ee..1114ef2 100644 --- a/frontend/src/routes/_old/old/-components/layout/lst-sidebar.tsx +++ b/frontend/src/routes/_old/old/-components/layout/lst-sidebar.tsx @@ -12,7 +12,7 @@ import { userAccess, useUserRoles, } from "../../../../../lib/authClient"; -import { useModuleStore } from "../../-lib/store/useModuleStore"; + import { AdminSideBar } from "./side-components/admin"; import { EomSideBar } from "./side-components/eom"; import { ForkliftSideBar } from "./side-components/forklift"; @@ -24,20 +24,13 @@ import { QualitySideBar } from "./side-components/quality"; export function AppSidebar() { const { session } = useAuth(); const { userRoles } = useUserRoles(); - const { modules } = useModuleStore(); return (
- n.name === "production")[0] - ?.module_id as string - } - /> + {/* userAccess("logistics", ["systemAdmin", "admin","manager","viewer"]) */} diff --git a/frontend/src/routes/_old/old/-components/layout/side-components/logistics.tsx b/frontend/src/routes/_old/old/-components/layout/side-components/logistics.tsx index a129c43..8b31b7e 100644 --- a/frontend/src/routes/_old/old/-components/layout/side-components/logistics.tsx +++ b/frontend/src/routes/_old/old/-components/layout/side-components/logistics.tsx @@ -1,4 +1,13 @@ -import { Barcode, Command, Cylinder, Package, Truck } from "lucide-react"; +import { + Barcode, + Cat, + Command, + Cylinder, + Database, + Package, + Truck, +} from "lucide-react"; + import type { UserRoles } from "@/lib/authClient"; import { SidebarGroup, @@ -8,7 +17,7 @@ import { SidebarMenuButton, SidebarMenuItem, } from "../../../../../../components/ui/sidebar"; -import { useSubModuleStore } from "../../../-lib/store/useSubModuleStore"; +import { useModuleStore } from "../../../-lib/store/useModuleStore"; import type { User } from "../../../-types/users"; import { hasPageAccess } from "../../../-utils/userAccess"; @@ -18,6 +27,8 @@ const iconMap: any = { Cylinder: Cylinder, Barcode: Barcode, Command: Command, + Cat: Cat, + Database: Database, }; export function LogisticsSideBar({ @@ -27,9 +38,9 @@ export function LogisticsSideBar({ user: User | null; userRoles: UserRoles[] | null; }) { - const { subModules } = useSubModuleStore(); + const { modules } = useModuleStore(); - const items = subModules?.filter((m) => m.moduleName === "logistics"); + const items = modules?.filter((m) => m.category === "logistics"); const userUpdate = { ...user, roles: userRoles }; return ( @@ -38,9 +49,10 @@ export function LogisticsSideBar({ {items.map((item) => { - const Icon = iconMap[item.icon]; + const Icon = iconMap[item.icon === "" ? "Cat" : item.icon]; + if (!item.active) return; return ( - + {hasPageAccess(userUpdate as any, item.roles, item.name) && ( <> diff --git a/frontend/src/routes/_old/old/-components/layout/side-components/production.tsx b/frontend/src/routes/_old/old/-components/layout/side-components/production.tsx index 3712ef0..2ec432e 100644 --- a/frontend/src/routes/_old/old/-components/layout/side-components/production.tsx +++ b/frontend/src/routes/_old/old/-components/layout/side-components/production.tsx @@ -1,4 +1,5 @@ -import { Printer, Tag } from "lucide-react"; +import { Cat, Printer, Tag } from "lucide-react"; +import type { UserRoles } from "@/lib/authClient"; import { SidebarGroup, SidebarGroupContent, @@ -7,54 +8,53 @@ import { SidebarMenuButton, SidebarMenuItem, } from "../../../../../../components/ui/sidebar"; +import { useModuleStore } from "../../../-lib/store/useModuleStore"; import type { User } from "../../../-types/users"; import { hasPageAccess } from "../../../-utils/userAccess"; +const iconMap: any = { + Printer: Printer, + Tag: Tag, + + Cat: Cat, +}; + export function ProductionSideBar({ user, - moduleID, + userRoles, }: { user: User | null; - moduleID: string; + userRoles: UserRoles[] | null; }) { - const url: string = window.location.host.split(":")[0]; - const items = [ - { - title: "One Click Print", - url: "/lst/app/old/ocp", - icon: Printer, - role: ["viewer"], - module: "ocp", - active: true, - }, - { - title: "Rfid Readers", - url: "/lst/app/old/rfid", - icon: Tag, - role: ["viewer"], - module: "production", - active: url === "usday1vms006" || url === "localhost" ? true : false, - }, - ]; + //const url: string = window.location.host.split(":")[0]; + const { modules } = useModuleStore(); + + const items = modules?.filter((m) => m.category === "production"); + const userUpdate = { ...user, roles: userRoles }; + return ( Production - {items.map((item) => ( - - <> - {hasPageAccess(user, item.role, moduleID) && item.active && ( - - - - {item.title} - - - )} - - - ))} + {items.map((item) => { + if (!item.active) return; + const Icon = iconMap[item.icon === "" ? "Cat" : item.icon]; + return ( + + <> + {hasPageAccess(userUpdate as any, item.roles, item.name) && ( + + + + {item.name} + + + )} + + + ); + })} diff --git a/frontend/src/routes/_old/old/-components/ocp/Lots.tsx b/frontend/src/routes/_old/old/-components/ocp/Lots.tsx index dea3079..2bc201a 100644 --- a/frontend/src/routes/_old/old/-components/ocp/Lots.tsx +++ b/frontend/src/routes/_old/old/-components/ocp/Lots.tsx @@ -77,6 +77,7 @@ export default function Lots() { "technician", "admin", "manager", + "supervisor", ]); if (session?.user && accessRoles) { diff --git a/frontend/src/routes/_old/old/-lib/store/useModuleStore.ts b/frontend/src/routes/_old/old/-lib/store/useModuleStore.ts index 97d6014..69b9797 100644 --- a/frontend/src/routes/_old/old/-lib/store/useModuleStore.ts +++ b/frontend/src/routes/_old/old/-lib/store/useModuleStore.ts @@ -18,7 +18,7 @@ export const useModuleStore = create()((set) => ({ fetchModules: async () => { try { //const response = await axios.get<{data: Setting[]}>(`${process.env.NEXT_PUBLIC_URL}/api/settings/client`); - const response = await axios.get(`/lst/old/api/server/modules`, {}); + const response = await axios.get(`/lst/api/system/modules`, {}); const data: FetchModulesResponse = response.data; //await response.json(); //console.log(data); set({ modules: data.data }); diff --git a/frontend/src/routes/_old/old/-types/modules.ts b/frontend/src/routes/_old/old/-types/modules.ts index c07b89e..25c3052 100644 --- a/frontend/src/routes/_old/old/-types/modules.ts +++ b/frontend/src/routes/_old/old/-types/modules.ts @@ -1,20 +1,23 @@ export interface Modules { - module_id: string; - name: string; - active: boolean; - roles: string; - add_user: string; - add_date: Date; - upd_user: string; - upd_date: Date; + module_id: string; + icon: string; + name: string; + link: string; + active: boolean; + roles: string; + category: string; + add_user: string; + add_date: Date; + upd_user: string; + upd_date: Date; } export interface SubModules { - submodule_id: string; - name: string; - link: string; - icon: string; - moduleName: string; - active: boolean; - roles: string[]; + submodule_id: string; + name: string; + link: string; + icon: string; + moduleName: string; + active: boolean; + roles: string[]; } diff --git a/lstV2/server/services/sqlServer/querys/ocp/lots.ts b/lstV2/server/services/sqlServer/querys/ocp/lots.ts index c28f8eb..e86a56e 100644 --- a/lstV2/server/services/sqlServer/querys/ocp/lots.ts +++ b/lstV2/server/services/sqlServer/querys/ocp/lots.ts @@ -68,4 +68,6 @@ select IdMaschinen_ProdPlanung as LabelOnlineID, where IsTechnicallyReleased = 1 and DruckStatus = 1 + + order by MaschinenStandort `; diff --git a/migrations/0021_motionless_ezekiel.sql b/migrations/0021_motionless_ezekiel.sql new file mode 100644 index 0000000..92c5a0d --- /dev/null +++ b/migrations/0021_motionless_ezekiel.sql @@ -0,0 +1,23 @@ +CREATE TABLE "forecast_Data" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "customer_article_number" text, + "date_requested" timestamp DEFAULT now(), + "quantity" real, + "request_date" timestamp NOT NULL, + "article" integer, + "customer_id" integer NOT NULL, + "created_at" timestamp DEFAULT now() +); +--> statement-breakpoint +CREATE TABLE "modules" ( + "module_id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "name" text NOT NULL, + "active" boolean DEFAULT false, + "roles" jsonb DEFAULT '["view","systemAdmin"]'::jsonb NOT NULL, + "add_User" text DEFAULT 'LST_System' NOT NULL, + "add_Date" timestamp DEFAULT now(), + "upd_User" text DEFAULT 'LST_System' NOT NULL, + "upd_date" timestamp DEFAULT now() +); +--> statement-breakpoint +CREATE UNIQUE INDEX "module_name" ON "modules" USING btree ("name"); \ No newline at end of file diff --git a/migrations/0022_old_next_avengers.sql b/migrations/0022_old_next_avengers.sql new file mode 100644 index 0000000..b89c5b0 --- /dev/null +++ b/migrations/0022_old_next_avengers.sql @@ -0,0 +1 @@ +ALTER TABLE "modules" ADD COLUMN "category" text; \ No newline at end of file diff --git a/migrations/0023_minor_marvel_zombies.sql b/migrations/0023_minor_marvel_zombies.sql new file mode 100644 index 0000000..9256a3c --- /dev/null +++ b/migrations/0023_minor_marvel_zombies.sql @@ -0,0 +1,2 @@ +ALTER TABLE "modules" ADD COLUMN "icon" text;--> statement-breakpoint +ALTER TABLE "modules" ADD COLUMN "link" text; \ No newline at end of file diff --git a/migrations/meta/0021_snapshot.json b/migrations/meta/0021_snapshot.json new file mode 100644 index 0000000..4df114e --- /dev/null +++ b/migrations/meta/0021_snapshot.json @@ -0,0 +1,1721 @@ +{ + "id": "3e1188f7-a900-413b-966a-cecc824595fa", + "prevId": "434e402a-a38c-434e-aa71-b54d36c6d7b0", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.apiHits": { + "name": "apiHits", + "schema": "", + "columns": { + "apiHit_id": { + "name": "apiHit_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "method": { + "name": "method", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "body": { + "name": "body", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "ip": { + "name": "ip", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "duration": { + "name": "duration", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 86400000 + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 10 + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "apikey_user_id_user_id_fk": { + "name": "apikey_user_id_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.jwks": { + "name": "jwks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "display_username": { + "name": "display_username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_login": { + "name": "last_login", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + }, + "user_username_unique": { + "name": "user_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forecast_Data": { + "name": "forecast_Data", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "customer_article_number": { + "name": "customer_article_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "date_requested": { + "name": "date_requested", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "quantity": { + "name": "quantity", + "type": "real", + "primaryKey": false, + "notNull": false + }, + "request_date": { + "name": "request_date", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "article": { + "name": "article", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "customer_id": { + "name": "customer_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.logs": { + "name": "logs", + "schema": "", + "columns": { + "log_id": { + "name": "log_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "level": { + "name": "level", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "module": { + "name": "module", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "subModule": { + "name": "subModule", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "stack": { + "name": "stack", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "checked": { + "name": "checked", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "hostname": { + "name": "hostname", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.modules": { + "name": "modules", + "schema": "", + "columns": { + "module_id": { + "name": "module_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[\"view\",\"systemAdmin\"]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "module_name": { + "name": "module_name", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.orderScheduler": { + "name": "orderScheduler", + "schema": "", + "columns": { + "schedule_id": { + "name": "schedule_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "av": { + "name": "av", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "order_type": { + "name": "order_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "order_number": { + "name": "order_number", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "header": { + "name": "header", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "line_item_number": { + "name": "line_item_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customer_release_number": { + "name": "customer_release_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "delivery_date": { + "name": "delivery_date", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "loading_date": { + "name": "loading_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "order_qty": { + "name": "order_qty", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "order_lu": { + "name": "order_lu", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "delivered_qty": { + "name": "delivered_qty", + "type": "real", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "delivered_lu": { + "name": "delivered_lu", + "type": "real", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "remark": { + "name": "remark", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_as_EDI": { + "name": "created_as_EDI", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "current_state": { + "name": "current_state", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "lst_date_check": { + "name": "lst_date_check", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "customer_address_id": { + "name": "customer_address_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "customer_description": { + "name": "customer_description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dock": { + "name": "dock", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "order_from": { + "name": "order_from", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "orderNumber": { + "name": "orderNumber", + "columns": [ + { + "expression": "order_number", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.printers": { + "name": "printers", + "schema": "", + "columns": { + "printer_id": { + "name": "printer_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "humanReadableId": { + "name": "humanReadableId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "port": { + "name": "port", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status_text": { + "name": "status_text", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_time_printed": { + "name": "last_time_printed", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "assigned": { + "name": "assigned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "remark": { + "name": "remark", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "print_delay": { + "name": "print_delay", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "default": "'90'" + }, + "monitor_state": { + "name": "monitor_state", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "processes": { + "name": "processes", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "print_delay_override": { + "name": "print_delay_override", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "humanReadableId": { + "name": "humanReadableId", + "columns": [ + { + "expression": "humanReadableId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.prodlabels": { + "name": "prodlabels", + "schema": "", + "columns": { + "label_id": { + "name": "label_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "printerID": { + "name": "printerID", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "printerName": { + "name": "printerName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "line": { + "name": "line", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "runningNr": { + "name": "runningNr", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "add_user": { + "name": "add_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst'" + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "runningNr": { + "name": "runningNr", + "columns": [ + { + "expression": "runningNr", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.prodPermissions": { + "name": "prodPermissions", + "schema": "", + "columns": { + "prodPerm_id": { + "name": "prodPerm_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "rolesLegacy": { + "name": "rolesLegacy", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "prodPermName": { + "name": "prodPermName", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.serverData": { + "name": "serverData", + "schema": "", + "columns": { + "server_id": { + "name": "server_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverDNS": { + "name": "serverDNS", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "plantToken": { + "name": "plantToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "ipAddress": { + "name": "ipAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "greatPlainsPlantCode": { + "name": "greatPlainsPlantCode", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "streetAddress": { + "name": "streetAddress", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cityState": { + "name": "cityState", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "zipcode": { + "name": "zipcode", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "contactEmail": { + "name": "contactEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "contactPhone": { + "name": "contactPhone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customerTiAcc": { + "name": "customerTiAcc", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "lstServerPort": { + "name": "lstServerPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "serverLoc": { + "name": "serverLoc", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "lastUpdated": { + "name": "lastUpdated", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "isUpgrading": { + "name": "isUpgrading", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "add_user": { + "name": "add_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst_user'" + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_user": { + "name": "upd_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst_user'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "plantToken": { + "name": "plantToken", + "columns": [ + { + "expression": "plantToken", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.serverStats": { + "name": "serverStats", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "default": "'serverStats'" + }, + "build": { + "name": "build", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "lastUpdate": { + "name": "lastUpdate", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.settings": { + "name": "settings", + "schema": "", + "columns": { + "settings_id": { + "name": "settings_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "moduleName": { + "name": "moduleName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[\"systemAdmin\"]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "name": { + "name": "name", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_roles": { + "name": "user_roles", + "schema": "", + "columns": { + "user_role_id": { + "name": "user_role_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "module": { + "name": "module", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "unique_user_module": { + "name": "unique_user_module", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "module", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "user_roles_user_id_user_id_fk": { + "name": "user_roles_user_id_user_id_fk", + "tableFrom": "user_roles", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/migrations/meta/0022_snapshot.json b/migrations/meta/0022_snapshot.json new file mode 100644 index 0000000..3622fa8 --- /dev/null +++ b/migrations/meta/0022_snapshot.json @@ -0,0 +1,1727 @@ +{ + "id": "18d202f7-91d0-433f-8d33-4e573594925e", + "prevId": "3e1188f7-a900-413b-966a-cecc824595fa", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.apiHits": { + "name": "apiHits", + "schema": "", + "columns": { + "apiHit_id": { + "name": "apiHit_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "method": { + "name": "method", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "body": { + "name": "body", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "ip": { + "name": "ip", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "duration": { + "name": "duration", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 86400000 + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 10 + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "apikey_user_id_user_id_fk": { + "name": "apikey_user_id_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.jwks": { + "name": "jwks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "display_username": { + "name": "display_username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_login": { + "name": "last_login", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + }, + "user_username_unique": { + "name": "user_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forecast_Data": { + "name": "forecast_Data", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "customer_article_number": { + "name": "customer_article_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "date_requested": { + "name": "date_requested", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "quantity": { + "name": "quantity", + "type": "real", + "primaryKey": false, + "notNull": false + }, + "request_date": { + "name": "request_date", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "article": { + "name": "article", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "customer_id": { + "name": "customer_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.logs": { + "name": "logs", + "schema": "", + "columns": { + "log_id": { + "name": "log_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "level": { + "name": "level", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "module": { + "name": "module", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "subModule": { + "name": "subModule", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "stack": { + "name": "stack", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "checked": { + "name": "checked", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "hostname": { + "name": "hostname", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.modules": { + "name": "modules", + "schema": "", + "columns": { + "module_id": { + "name": "module_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "category": { + "name": "category", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[\"view\",\"systemAdmin\"]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "module_name": { + "name": "module_name", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.orderScheduler": { + "name": "orderScheduler", + "schema": "", + "columns": { + "schedule_id": { + "name": "schedule_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "av": { + "name": "av", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "order_type": { + "name": "order_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "order_number": { + "name": "order_number", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "header": { + "name": "header", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "line_item_number": { + "name": "line_item_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customer_release_number": { + "name": "customer_release_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "delivery_date": { + "name": "delivery_date", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "loading_date": { + "name": "loading_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "order_qty": { + "name": "order_qty", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "order_lu": { + "name": "order_lu", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "delivered_qty": { + "name": "delivered_qty", + "type": "real", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "delivered_lu": { + "name": "delivered_lu", + "type": "real", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "remark": { + "name": "remark", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_as_EDI": { + "name": "created_as_EDI", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "current_state": { + "name": "current_state", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "lst_date_check": { + "name": "lst_date_check", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "customer_address_id": { + "name": "customer_address_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "customer_description": { + "name": "customer_description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dock": { + "name": "dock", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "order_from": { + "name": "order_from", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "orderNumber": { + "name": "orderNumber", + "columns": [ + { + "expression": "order_number", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.printers": { + "name": "printers", + "schema": "", + "columns": { + "printer_id": { + "name": "printer_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "humanReadableId": { + "name": "humanReadableId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "port": { + "name": "port", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status_text": { + "name": "status_text", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_time_printed": { + "name": "last_time_printed", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "assigned": { + "name": "assigned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "remark": { + "name": "remark", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "print_delay": { + "name": "print_delay", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "default": "'90'" + }, + "monitor_state": { + "name": "monitor_state", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "processes": { + "name": "processes", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "print_delay_override": { + "name": "print_delay_override", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "humanReadableId": { + "name": "humanReadableId", + "columns": [ + { + "expression": "humanReadableId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.prodlabels": { + "name": "prodlabels", + "schema": "", + "columns": { + "label_id": { + "name": "label_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "printerID": { + "name": "printerID", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "printerName": { + "name": "printerName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "line": { + "name": "line", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "runningNr": { + "name": "runningNr", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "add_user": { + "name": "add_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst'" + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "runningNr": { + "name": "runningNr", + "columns": [ + { + "expression": "runningNr", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.prodPermissions": { + "name": "prodPermissions", + "schema": "", + "columns": { + "prodPerm_id": { + "name": "prodPerm_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "rolesLegacy": { + "name": "rolesLegacy", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "prodPermName": { + "name": "prodPermName", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.serverData": { + "name": "serverData", + "schema": "", + "columns": { + "server_id": { + "name": "server_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverDNS": { + "name": "serverDNS", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "plantToken": { + "name": "plantToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "ipAddress": { + "name": "ipAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "greatPlainsPlantCode": { + "name": "greatPlainsPlantCode", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "streetAddress": { + "name": "streetAddress", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cityState": { + "name": "cityState", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "zipcode": { + "name": "zipcode", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "contactEmail": { + "name": "contactEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "contactPhone": { + "name": "contactPhone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customerTiAcc": { + "name": "customerTiAcc", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "lstServerPort": { + "name": "lstServerPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "serverLoc": { + "name": "serverLoc", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "lastUpdated": { + "name": "lastUpdated", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "isUpgrading": { + "name": "isUpgrading", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "add_user": { + "name": "add_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst_user'" + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_user": { + "name": "upd_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst_user'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "plantToken": { + "name": "plantToken", + "columns": [ + { + "expression": "plantToken", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.serverStats": { + "name": "serverStats", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "default": "'serverStats'" + }, + "build": { + "name": "build", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "lastUpdate": { + "name": "lastUpdate", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.settings": { + "name": "settings", + "schema": "", + "columns": { + "settings_id": { + "name": "settings_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "moduleName": { + "name": "moduleName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[\"systemAdmin\"]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "name": { + "name": "name", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_roles": { + "name": "user_roles", + "schema": "", + "columns": { + "user_role_id": { + "name": "user_role_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "module": { + "name": "module", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "unique_user_module": { + "name": "unique_user_module", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "module", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "user_roles_user_id_user_id_fk": { + "name": "user_roles_user_id_user_id_fk", + "tableFrom": "user_roles", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/migrations/meta/0023_snapshot.json b/migrations/meta/0023_snapshot.json new file mode 100644 index 0000000..eee6d03 --- /dev/null +++ b/migrations/meta/0023_snapshot.json @@ -0,0 +1,1739 @@ +{ + "id": "1c522601-1d75-48ad-a08b-f47d84a8de70", + "prevId": "18d202f7-91d0-433f-8d33-4e573594925e", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.apiHits": { + "name": "apiHits", + "schema": "", + "columns": { + "apiHit_id": { + "name": "apiHit_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "method": { + "name": "method", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "body": { + "name": "body", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "ip": { + "name": "ip", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "duration": { + "name": "duration", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 86400000 + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 10 + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "apikey_user_id_user_id_fk": { + "name": "apikey_user_id_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.jwks": { + "name": "jwks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "display_username": { + "name": "display_username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_login": { + "name": "last_login", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + }, + "user_username_unique": { + "name": "user_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.forecast_Data": { + "name": "forecast_Data", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "customer_article_number": { + "name": "customer_article_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "date_requested": { + "name": "date_requested", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "quantity": { + "name": "quantity", + "type": "real", + "primaryKey": false, + "notNull": false + }, + "request_date": { + "name": "request_date", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "article": { + "name": "article", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "customer_id": { + "name": "customer_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.logs": { + "name": "logs", + "schema": "", + "columns": { + "log_id": { + "name": "log_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "level": { + "name": "level", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "module": { + "name": "module", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "subModule": { + "name": "subModule", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "stack": { + "name": "stack", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "checked": { + "name": "checked", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "hostname": { + "name": "hostname", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.modules": { + "name": "modules", + "schema": "", + "columns": { + "module_id": { + "name": "module_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "category": { + "name": "category", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "link": { + "name": "link", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[\"view\",\"systemAdmin\"]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "module_name": { + "name": "module_name", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.orderScheduler": { + "name": "orderScheduler", + "schema": "", + "columns": { + "schedule_id": { + "name": "schedule_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "av": { + "name": "av", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "order_type": { + "name": "order_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "order_number": { + "name": "order_number", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "header": { + "name": "header", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "line_item_number": { + "name": "line_item_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customer_release_number": { + "name": "customer_release_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "delivery_date": { + "name": "delivery_date", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "loading_date": { + "name": "loading_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "order_qty": { + "name": "order_qty", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "order_lu": { + "name": "order_lu", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "delivered_qty": { + "name": "delivered_qty", + "type": "real", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "delivered_lu": { + "name": "delivered_lu", + "type": "real", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "remark": { + "name": "remark", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_as_EDI": { + "name": "created_as_EDI", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "current_state": { + "name": "current_state", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "lst_date_check": { + "name": "lst_date_check", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "customer_address_id": { + "name": "customer_address_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "customer_description": { + "name": "customer_description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dock": { + "name": "dock", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "order_from": { + "name": "order_from", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "orderNumber": { + "name": "orderNumber", + "columns": [ + { + "expression": "order_number", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.printers": { + "name": "printers", + "schema": "", + "columns": { + "printer_id": { + "name": "printer_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "humanReadableId": { + "name": "humanReadableId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "port": { + "name": "port", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status_text": { + "name": "status_text", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_time_printed": { + "name": "last_time_printed", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "assigned": { + "name": "assigned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "remark": { + "name": "remark", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "print_delay": { + "name": "print_delay", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "default": "'90'" + }, + "monitor_state": { + "name": "monitor_state", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "processes": { + "name": "processes", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "print_delay_override": { + "name": "print_delay_override", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "humanReadableId": { + "name": "humanReadableId", + "columns": [ + { + "expression": "humanReadableId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.prodlabels": { + "name": "prodlabels", + "schema": "", + "columns": { + "label_id": { + "name": "label_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "printerID": { + "name": "printerID", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "printerName": { + "name": "printerName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "line": { + "name": "line", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "runningNr": { + "name": "runningNr", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "add_user": { + "name": "add_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst'" + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "runningNr": { + "name": "runningNr", + "columns": [ + { + "expression": "runningNr", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.prodPermissions": { + "name": "prodPermissions", + "schema": "", + "columns": { + "prodPerm_id": { + "name": "prodPerm_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "rolesLegacy": { + "name": "rolesLegacy", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "prodPermName": { + "name": "prodPermName", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.serverData": { + "name": "serverData", + "schema": "", + "columns": { + "server_id": { + "name": "server_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverDNS": { + "name": "serverDNS", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "plantToken": { + "name": "plantToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "ipAddress": { + "name": "ipAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "greatPlainsPlantCode": { + "name": "greatPlainsPlantCode", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "streetAddress": { + "name": "streetAddress", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cityState": { + "name": "cityState", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "zipcode": { + "name": "zipcode", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "contactEmail": { + "name": "contactEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "contactPhone": { + "name": "contactPhone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customerTiAcc": { + "name": "customerTiAcc", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "lstServerPort": { + "name": "lstServerPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "serverLoc": { + "name": "serverLoc", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "lastUpdated": { + "name": "lastUpdated", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "isUpgrading": { + "name": "isUpgrading", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "add_user": { + "name": "add_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst_user'" + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_user": { + "name": "upd_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst_user'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "plantToken": { + "name": "plantToken", + "columns": [ + { + "expression": "plantToken", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.serverStats": { + "name": "serverStats", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "default": "'serverStats'" + }, + "build": { + "name": "build", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "lastUpdate": { + "name": "lastUpdate", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.settings": { + "name": "settings", + "schema": "", + "columns": { + "settings_id": { + "name": "settings_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "moduleName": { + "name": "moduleName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[\"systemAdmin\"]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "name": { + "name": "name", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_roles": { + "name": "user_roles", + "schema": "", + "columns": { + "user_role_id": { + "name": "user_role_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "module": { + "name": "module", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "unique_user_module": { + "name": "unique_user_module", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "module", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "user_roles_user_id_user_id_fk": { + "name": "user_roles_user_id_user_id_fk", + "tableFrom": "user_roles", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/migrations/meta/_journal.json b/migrations/meta/_journal.json index f0756ae..c98f433 100644 --- a/migrations/meta/_journal.json +++ b/migrations/meta/_journal.json @@ -148,6 +148,27 @@ "when": 1760703799708, "tag": "0020_conscious_hairball", "breakpoints": true + }, + { + "idx": 21, + "version": "7", + "when": 1761776315202, + "tag": "0021_motionless_ezekiel", + "breakpoints": true + }, + { + "idx": 22, + "version": "7", + "when": 1761780723108, + "tag": "0022_old_next_avengers", + "breakpoints": true + }, + { + "idx": 23, + "version": "7", + "when": 1761781568161, + "tag": "0023_minor_marvel_zombies", + "breakpoints": true } ] } \ No newline at end of file diff --git a/scripts/lstAppMoves.mjs b/scripts/lstAppMoves.mjs index 8117f8c..12dfea7 100644 --- a/scripts/lstAppMoves.mjs +++ b/scripts/lstAppMoves.mjs @@ -11,6 +11,13 @@ const dest_settings = path.resolve( "dist/src/internal/system/controller/settings/settings.json", ); +const src_modules = path.resolve( + "app/src/internal/system/controller/modules/modules.json", +); +const dest_modules = path.resolve( + "dist/src/internal/system/controller/modules/modules.json", +); + // Delete old views if they exist if (fs.existsSync(dest_views)) { fs.rmSync(dest_views, { recursive: true, force: true }); @@ -21,14 +28,24 @@ if (fs.existsSync(dest_settings)) { fs.rmSync(dest_settings, { force: true }); // for single files we dont need the recursive } +if (fs.existsSync(dest_modules)) { + fs.rmSync(dest_modules, { force: true }); // for single files we dont need the recursive +} + // Ensure the destination directory exists for settings.json const dest_settings_dir = path.dirname(dest_settings); if (!fs.existsSync(dest_settings_dir)) { fs.mkdirSync(dest_settings_dir, { recursive: true }); } +const dest_modules_dir = path.dirname(dest_modules); +if (!fs.existsSync(dest_modules_dir)) { + fs.mkdirSync(dest_modules_dir, { recursive: true }); +} + // Copy files fs.copyFileSync(src_settings, dest_settings); +fs.copyFileSync(src_modules, dest_modules); fs.cpSync(src_views, dest_views, { recursive: true }); console.log(`All files copied`);