feat(eom): migrated eom endpoints from old version validated working

This commit is contained in:
2026-06-09 07:00:27 -05:00
parent 4249e90307
commit e909e8deec
21 changed files with 906 additions and 2 deletions

View File

@@ -0,0 +1,107 @@
import { formatInTimeZone } from "date-fns-tz";
import { Router } from "express";
import { gpQuery } from "../gpSql/gpSqlQuery.controller.js";
import {
type SqlGPQuery,
sqlGpQuerySelector,
} from "../gpSql/gpSqlQuerySelector.utils.js";
import { apiReturn } from "../utils/returnHelper.utils.js";
import { tryCatch } from "../utils/trycatch.utils.js";
const r = Router();
r.get("/", async (req, res) => {
const { startDate, endDate, glCode, includePlantToken } = req.query;
if (
!startDate ||
startDate === "" ||
!endDate ||
endDate === "" ||
!glCode ||
glCode === ""
) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "GpData",
message:
"The start date, end date, and gl code are required to run this query.",
data: [],
status: 400,
});
}
const sqlQuery = sqlGpQuerySelector(`gp.eom.data`) as SqlGPQuery;
if (!sqlQuery.success) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "GpData",
message:
"Failed to get GpData sql file please, please contact support if this continues.",
data: [],
status: 400,
});
}
const { data, error } = await tryCatch(
gpQuery(
sqlQuery.query
.replace("[startDate]", startDate as string)
.replace("[endDate]", endDate as string)
.replace("[gpCode]", glCode as string),
"Eom GpData data",
),
);
if (error) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "GpData",
message: `Error getting GpData data info`,
data: error as any,
notify: false,
status: 400,
});
}
return apiReturn(res, {
success: data.success,
level: data.success ? "info" : "error",
module: "eom",
subModule: "GpData",
message: data.message,
data:
includePlantToken === "true" && data.success
? data.data.map((i) => {
return {
plantToken: process.env.PROD_PLANT_TOKEN,
...i,
Date_Received: formatInTimeZone(
i.Date_Received,
"etc/utc",
"M/d/yyyy",
),
};
})
: data.data.map((i) => {
return {
...i,
Date_Received: formatInTimeZone(
i.Date_Received,
"etc/utc",
"M/d/yyyy",
),
};
}),
notify: false,
status: data.success ? 200 : 400,
});
});
export default r;

View File

@@ -0,0 +1,9 @@
/**
* The flow that will trigger all the history functions to run and store the data each day and clean up as needed
*
* if we are on usmcd1vms036 we will run a get request to all servers in the db so we can store that data as well.
*
* this will be stored in both. the vms036 functions will store in a bigger server so it can be pulled faster and in ssrs
*/
export const eomHistory = async () => {};

View File

@@ -0,0 +1,61 @@
import { format } from "date-fns";
import { eq } from "drizzle-orm";
import { Router } from "express";
import { db } from "../db/db.controller.js";
import { invHistoricalData } from "../db/schema/historicalInv.schema.js";
import { apiReturn } from "../utils/returnHelper.utils.js";
import { tryCatch } from "../utils/trycatch.utils.js";
const r = Router();
r.get("/", async (req, res) => {
// the params we are wanting to add in. min required will be the month so we dont pass everything over
const { date } = req.query;
if (!date || date === "") {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "historical inv",
message:
"The day of the month is required to be included in order to pass.",
data: [],
status: 400,
});
}
// get the date passed over.
const { data, error } = await tryCatch(
db
.select()
.from(invHistoricalData)
.where(
eq(invHistoricalData.histDate, format(date as string, "yyyy-MM-dd")),
),
);
if (error) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "historical inv",
message:
"There was an error getting the historical data from the server.",
data: error as any,
status: 400,
});
}
return apiReturn(res, {
success: true,
level: "info",
module: "eom",
subModule: "historical inv",
message: "Eom Historical Inv Data",
data: data,
status: 200,
});
});
export default r;

View File

@@ -0,0 +1,78 @@
import { formatInTimeZone } from "date-fns-tz";
import { Router } from "express";
import { prodQuery } from "../prodSql/prodSqlQuery.controller.js";
import {
type SqlQuery,
sqlQuerySelector,
} from "../prodSql/prodSqlQuerySelector.utils.js";
import { apiReturn } from "../utils/returnHelper.utils.js";
import { tryCatch } from "../utils/trycatch.utils.js";
const r = Router();
r.get("/", async (req, res) => {
const { includePlantToken } = req.query;
const sqlQuery = sqlQuerySelector(`eom.lastPurchasePrice`) as SqlQuery;
if (!sqlQuery.success) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "lastPurchasePrice",
message:
"Failed to get last sales price sql file please, please contact support if this continues.",
data: [],
status: 400,
});
}
const { data, error } = await tryCatch(
prodQuery(
sqlQuery.query,
"Eom last purchase price data",
),
);
if (error) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "lastPurchasePrice",
message: `Error getting last purchase Price data info`,
data: error as any,
notify: false,
status: 400,
});
}
return apiReturn(res, {
success: data.success,
level: data.success ? "info" : "error",
module: "eom",
subModule: "lastPurchasePrice",
message: data.message,
data:
includePlantToken === "true" && data.success
? data.data.map((i) => {
return {
plantToken: process.env.PROD_PLANT_TOKEN,
...i,
//validDate: formatInTimeZone(i.validDate, "etc/utc", "M/d/yyyy"),
};
})
: data.data.map((i) => {
return {
...i,
//validDate: formatInTimeZone(i.validDate, "etc/utc", "M/d/yyyy"),
};
}),
notify: false,
status: data.success ? 200 : 400,
});
});
export default r;

View File

@@ -0,0 +1,89 @@
import { formatInTimeZone } from "date-fns-tz";
import { Router } from "express";
import { prodQuery } from "../prodSql/prodSqlQuery.controller.js";
import {
type SqlQuery,
sqlQuerySelector,
} from "../prodSql/prodSqlQuerySelector.utils.js";
import { apiReturn } from "../utils/returnHelper.utils.js";
import { tryCatch } from "../utils/trycatch.utils.js";
const r = Router();
r.get("/", async (req, res) => {
const { date, includePlantToken } = req.query;
if (!date || date === "") {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "lastSalesPrice",
message: "A date is required to run this query.",
data: [],
status: 400,
});
}
const sqlQuery = sqlQuerySelector(`eom.lastSalesPrice`) as SqlQuery;
if (!sqlQuery.success) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "lastSalesPrice",
message:
"Failed to get last sales price sql file please, please contact support if this continues.",
data: [],
status: 400,
});
}
const { data, error } = await tryCatch(
prodQuery(
sqlQuery.query.replace("[date]", date as string),
"Eom last sales price data",
),
);
if (error) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "lastSalesPrice",
message: `Error getting last Sales Price data info`,
data: error as any,
notify: false,
status: 400,
});
}
return apiReturn(res, {
success: data.success,
level: data.success ? "info" : "error",
module: "eom",
subModule: "lastSalesPrice",
message: data.message,
data:
includePlantToken === "true" && data.success
? data.data.map((i) => {
return {
plantToken: process.env.PROD_PLANT_TOKEN,
...i,
validDate: formatInTimeZone(i.validDate, "etc/utc", "M/d/yyyy"),
};
})
: data.data.map((i) => {
return {
...i,
validDate: formatInTimeZone(i.validDate, "etc/utc", "M/d/yyyy"),
};
}),
notify: false,
status: data.success ? 200 : 400,
});
});
export default r;

View File

@@ -0,0 +1,98 @@
import { formatInTimeZone } from "date-fns-tz";
import { Router } from "express";
import { prodQuery } from "../prodSql/prodSqlQuery.controller.js";
import {
type SqlQuery,
sqlQuerySelector,
} from "../prodSql/prodSqlQuerySelector.utils.js";
import { apiReturn } from "../utils/returnHelper.utils.js";
import { tryCatch } from "../utils/trycatch.utils.js";
const r = Router();
r.get("/", async (req, res) => {
const { startDate, endDate, includePlantToken } = req.query;
if (!startDate || startDate === "" || !endDate || endDate === "") {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "productionConsumption",
message: "The start date and end date are required to run this query.",
data: [],
status: 400,
});
}
const sqlQuery = sqlQuerySelector(`eom.productionConsumption`) as SqlQuery;
if (!sqlQuery.success) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "productionConsumption",
message:
"Failed to get production consumption sql file please, please contact support if this continues.",
data: [],
status: 400,
});
}
const { data, error } = await tryCatch(
prodQuery(
sqlQuery.query
.replace("[startDate]", startDate as string)
.replace("[endDate]", endDate as string),
"Eom production consumption data",
),
);
if (error) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "productionConsumption",
message: `Error getting production consumption data info`,
data: error as any,
notify: false,
status: 400,
});
}
return apiReturn(res, {
success: data.success,
level: data.success ? "info" : "error",
module: "eom",
subModule: "productionConsumption",
message: data.message,
data:
includePlantToken === "true" && data.success
? data.data.map((i) => {
return {
plantToken: process.env.PROD_PLANT_TOKEN,
...i,
// Prod_Date: formatInTimeZone(
// i.Prod_Date,
// "etc/utc",
// "M/d/yyyy",
// ),
};
})
: data.data.map((i) => {
return {
...i,
// Prod_Date: formatInTimeZone(
// i.Prod_Date,
// "etc/utc",
// "M/d/yyyy",
// ),
};
}),
notify: false,
status: data.success ? 200 : 400,
});
});
export default r;

View File

@@ -0,0 +1,98 @@
import { formatInTimeZone } from "date-fns-tz";
import { Router } from "express";
import { prodQuery } from "../prodSql/prodSqlQuery.controller.js";
import {
type SqlQuery,
sqlQuerySelector,
} from "../prodSql/prodSqlQuerySelector.utils.js";
import { apiReturn } from "../utils/returnHelper.utils.js";
import { tryCatch } from "../utils/trycatch.utils.js";
const r = Router();
r.get("/", async (req, res) => {
const { startDate, endDate, includePlantToken } = req.query;
if (!startDate || startDate === "" || !endDate || endDate === "") {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "purchased",
message: "The start date and end date are required to run this query.",
data: [],
status: 400,
});
}
const sqlQuery = sqlQuerySelector(`eom.purchased`) as SqlQuery;
if (!sqlQuery.success) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "purchased",
message:
"Failed to get purchased sql file please, please contact support if this continues.",
data: [],
status: 400,
});
}
const { data, error } = await tryCatch(
prodQuery(
sqlQuery.query
.replace("[startDate]", startDate as string)
.replace("[endDate]", endDate as string),
"Eom purchased data",
),
);
if (error) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "purchased",
message: `Error getting purchased data info`,
data: error as any,
notify: false,
status: 400,
});
}
return apiReturn(res, {
success: data.success,
level: data.success ? "info" : "error",
module: "eom",
subModule: "purchased",
message: data.message,
data:
includePlantToken === "true" && data.success
? data.data.map((i) => {
return {
plantToken: process.env.PROD_PLANT_TOKEN,
...i,
Received_Date: formatInTimeZone(
i.Received_Date,
"etc/utc",
"M/d/yyyy",
),
};
})
: data.data.map((i) => {
return {
...i,
Received_Date: formatInTimeZone(
i.Received_Date,
"etc/utc",
"M/d/yyyy",
),
};
}),
notify: false,
status: data.success ? 200 : 400,
});
});
export default r;

View File

@@ -0,0 +1,98 @@
import { formatInTimeZone } from "date-fns-tz";
import { Router } from "express";
import { prodQuery } from "../prodSql/prodSqlQuery.controller.js";
import {
type SqlQuery,
sqlQuerySelector,
} from "../prodSql/prodSqlQuerySelector.utils.js";
import { apiReturn } from "../utils/returnHelper.utils.js";
import { tryCatch } from "../utils/trycatch.utils.js";
const r = Router();
r.get("/", async (req, res) => {
const { startDate, endDate, includePlantToken } = req.query;
if (!startDate || startDate === "" || !endDate || endDate === "") {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "regrind",
message: "The start date and end date are required to run this query.",
data: [],
status: 400,
});
}
const sqlQuery = sqlQuerySelector(`eom.regrind`) as SqlQuery;
if (!sqlQuery.success) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "regrind",
message:
"Failed to get regrind sql file please, please contact support if this continues.",
data: [],
status: 400,
});
}
const { data, error } = await tryCatch(
prodQuery(
sqlQuery.query
.replace("[startDate]", startDate as string)
.replace("[endDate]", endDate as string),
"Eom regrind data",
),
);
if (error) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "regrind",
message: `Error getting regrind data info`,
data: error as any,
notify: false,
status: 400,
});
}
return apiReturn(res, {
success: data.success,
level: data.success ? "info" : "error",
module: "eom",
subModule: "regrind",
message: data.message,
data:
includePlantToken === "true" && data.success
? data.data.map((i) => {
return {
plantToken: process.env.PROD_PLANT_TOKEN,
...i,
Buchungsdatum: formatInTimeZone(
i.Buchungsdatum,
"etc/utc",
"M/d/yyyy",
),
};
})
: data.data.map((i) => {
return {
...i,
Buchungsdatum: formatInTimeZone(
i.Buchungsdatum,
"etc/utc",
"M/d/yyyy",
),
};
}),
notify: false,
status: data.success ? 200 : 400,
});
});
export default r;

35
backend/eom/eom.routes.ts Normal file
View File

@@ -0,0 +1,35 @@
import type { Express } from "express";
import { featureCheck } from "../middleware/featureActive.middleware.js";
import gpData from "./eom.gpdata.route.js";
import historyInv from "./eom.historyInv.route.js";
import lastPurchasePrice from "./eom.lastPurchasePrice.route.js";
import lastSalesPrice from "./eom.lastSalesPrice.route.js";
import productionConsumption from "./eom.productionConsumption.route.js";
import purchased from "./eom.purchased.route.js";
import regrind from "./eom.regrind.route.js";
import soldItems from "./eom.soldItems.route.js";
export const setupEomRoutes = (baseUrl: string, app: Express) => {
//stats will be like this as we dont need to change this
app.use(`${baseUrl}/api/eom/historyInv`, featureCheck("eom"), historyInv);
app.use(`${baseUrl}/api/eom/purchased`, featureCheck("eom"), purchased);
app.use(
`${baseUrl}/api/eom/lastSalesPrice`,
featureCheck("eom"),
lastSalesPrice,
);
app.use(
`${baseUrl}/api/eom/lastPurchasePrice`,
featureCheck("eom"),
lastPurchasePrice,
);
app.use(
`${baseUrl}/api/eom/productionConsumption`,
featureCheck("eom"),
productionConsumption,
);
app.use(`${baseUrl}/api/eom/regrind`, featureCheck("eom"), regrind);
app.use(`${baseUrl}/api/eom/soldItems`, featureCheck("eom"), soldItems);
app.use(`${baseUrl}/api/eom/gpData`, featureCheck("eom"), gpData);
};

View File

@@ -0,0 +1,98 @@
import { formatInTimeZone } from "date-fns-tz";
import { Router } from "express";
import { prodQuery } from "../prodSql/prodSqlQuery.controller.js";
import {
type SqlQuery,
sqlQuerySelector,
} from "../prodSql/prodSqlQuerySelector.utils.js";
import { apiReturn } from "../utils/returnHelper.utils.js";
import { tryCatch } from "../utils/trycatch.utils.js";
const r = Router();
r.get("/", async (req, res) => {
const { startDate, endDate, includePlantToken } = req.query;
if (!startDate || startDate === "" || !endDate || endDate === "") {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "soldItems",
message: "The start date and end date are required to run this query.",
data: [],
status: 400,
});
}
const sqlQuery = sqlQuerySelector(`eom.soldItems`) as SqlQuery;
if (!sqlQuery.success) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "soldItems",
message:
"Failed to get soldItems sql file please, please contact support if this continues.",
data: [],
status: 400,
});
}
const { data, error } = await tryCatch(
prodQuery(
sqlQuery.query
.replace("[startDate]", startDate as string)
.replace("[endDate]", endDate as string),
"Eom soldItems data",
),
);
if (error) {
return apiReturn(res, {
success: false,
level: "error",
module: "eom",
subModule: "soldItems",
message: `Error getting soldItems data info`,
data: error as any,
notify: false,
status: 400,
});
}
return apiReturn(res, {
success: data.success,
level: data.success ? "info" : "error",
module: "eom",
subModule: "soldItems",
message: data.message,
data:
includePlantToken === "true" && data.success
? data.data.map((i) => {
return {
plantToken: process.env.PROD_PLANT_TOKEN,
...i,
DeliveryDate: formatInTimeZone(
i.DeliveryDate,
"etc/utc",
"M/d/yyyy",
),
};
})
: data.data.map((i) => {
return {
...i,
DeliveryDate: formatInTimeZone(
i.DeliveryDate,
"etc/utc",
"M/d/yyyy",
),
};
}),
notify: false,
status: data.success ? 200 : 400,
});
});
export default r;