refactor: last20Messages und digitale Eingänge auf API-gesteuerte Mock-Dateien umgestellt

- Start.js (last20Messages) als JS-Mock in /apiMockData/jsMockFiles gespeichert
- de.js (digitale Eingänge) in /apiMockData/SERVICE verlagert
- Beide werden über eigene API-Endpoints bzw. per Script-Tag aus Development-Verzeichnis geladen
- Kein Zugriff mehr über /public notwendig, Verhalten in DEV und PROD identisch
This commit is contained in:
Ismail Ali
2025-04-15 07:20:17 +02:00
parent c0d6567c90
commit 9e931eed0f
26 changed files with 235 additions and 29 deletions

View File

@@ -1,4 +1,4 @@
// public/CPLmockData/SERVICE/de.js
// apiMockData/SERVICE/de.js
// Zustand -> DESxx xx =Nr Eingang 1-32 80-83 = BGT 1 bis 4
var win_de_state = [

View File

@@ -1,3 +1,4 @@
// /apiMockData/SERVICE/last20Messages.js
var win_last20Messages = `
<tr><td>16750</td><td>03501</td><td>2024-10-23 15:08:58:000</td><td>Modul 26 Isofehler kommend</td><td>1</td></tr>
<tr><td>16749</td><td>03201</td><td>2024-10-23 15:07:24:000</td><td>Modul 23 Isofehler gehend</td><td>0</td></tr>

View File

@@ -0,0 +1,23 @@
// /apiMockData/jsMockFiles/last20Messages.js
var win_last20Messages = `
<tr><td>16750</td><td>03501</td><td>2024-10-23 15:08:58:000</td><td>Modul 26 Isofehler kommend</td><td>1</td></tr>
<tr><td>16749</td><td>03201</td><td>2024-10-23 15:07:24:000</td><td>Modul 23 Isofehler gehend</td><td>0</td></tr>
<tr><td>16748</td><td>03501</td><td>2024-10-23 15:01:52:000</td><td>Modul 26 Isofehler gehend</td><td>0</td></tr>
<tr><td>16747</td><td>02801</td><td>2024-10-23 15:01:30:000</td><td>Modul 19 Isofehler kommend</td><td>1</td></tr>
<tr><td>16746</td><td>03501</td><td>2024-10-23 14:57:33:000</td><td>Modul 26 Isofehler kommend</td><td>1</td></tr>
<tr><td>16745</td><td>03201</td><td>2024-10-23 14:56:54:000</td><td>Modul 23 Isofehler kommend</td><td>1</td></tr>
<tr><td>16744</td><td>02801</td><td>2024-10-23 14:51:01:000</td><td>Modul 19 Isofehler gehend</td><td>0</td></tr>
<tr><td>16743</td><td>03501</td><td>2024-10-23 14:50:46:000</td><td>Modul 26 Isofehler gehend</td><td>0</td></tr>
<tr><td>16742</td><td>03201</td><td>2024-10-23 14:49:49:000</td><td>Modul 23 Isofehler gehend</td><td>0</td></tr>
<tr><td>16741</td><td>03501</td><td>2024-10-23 14:49:13:000</td><td>Modul 26 Isofehler kommend</td><td>1</td></tr>
<tr><td>16740</td><td>02801</td><td>2024-10-23 14:45:28:000</td><td>Modul 19 Isofehler kommend</td><td>1</td></tr>
<tr><td>16739</td><td>03201</td><td>2024-10-23 14:44:16:000</td><td>Modul 23 Isofehler kommend</td><td>1</td></tr>
<tr><td>16738</td><td>03501</td><td>2024-10-23 14:42:08:000</td><td>Modul 26 Isofehler gehend</td><td>0</td></tr>
<tr><td>16737</td><td>03201</td><td>2024-10-23 14:37:10:000</td><td>Modul 23 Isofehler gehend</td><td>0</td></tr>
<tr><td>16736</td><td>03501</td><td>2024-10-23 14:35:20:000</td><td>Modul 26 Isofehler kommend</td><td>1</td></tr>
<tr><td>16735</td><td>01201</td><td>2024-10-23 14:31:44:000</td><td>Modul 03 Isofehler kommend</td><td>1</td></tr>
<tr><td>16734</td><td>01701</td><td>2024-10-23 14:30:14:000</td><td>Modul 08 Isofehler kommend</td><td>1</td></tr>
<tr><td>16733</td><td>03501</td><td>2024-10-23 14:28:15:000</td><td>Modul 26 Isofehler gehend</td><td>0</td></tr>
<tr><td>16732</td><td>03301</td><td>2024-10-23 14:26:23:000</td><td>Modul 24 Isofehler kommend</td><td>1</td></tr>
<tr><td>16731</td><td>01201</td><td>2024-10-23 14:24:58:000</td><td>Modul 03 Isofehler gehend</td><td>0</td></tr>
`;

View File

@@ -6,5 +6,5 @@
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
*/
const webVersion = "1.6.220";
const webVersion = "1.6.221";
export default webVersion;

View File

@@ -0,0 +1,19 @@
// /pages/api/cpl/digitalOutputs.ts
import { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs/promises";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const filePath = path.join(process.cwd(), "apiMockData", "SERVICE", "da.js");
try {
const data = await fs.readFile(filePath, "utf-8");
res.status(200).send(data);
} catch (error) {
res.status(404).json({ error: "File not found" });
}
}

View File

@@ -0,0 +1,21 @@
// /pages/api/cpl/digitaleEingaenge.ts
import { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs/promises";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const filePath = path.join(process.cwd(), "apiMockData", "SERVICE", "de.js");
try {
const data = await fs.readFile(filePath, "utf-8");
res.setHeader("Content-Type", "text/javascript"); // wichtig!
res.status(200).send(data);
} catch (error) {
res.status(404).json({ error: "File not found" });
}
}

24
pages/api/cpl/kueData.ts Normal file
View File

@@ -0,0 +1,24 @@
// /pages/api/cpl/kueData.ts
import { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs/promises";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const filePath = path.join(
process.cwd(),
"apiMockData",
"SERVICE",
"kueData.js"
);
try {
const data = await fs.readFile(filePath, "utf-8");
res.status(200).send(data);
} catch (error) {
res.status(404).json({ error: "File not found" });
}
}

View File

@@ -0,0 +1,25 @@
// /pages/api/cpl/last20Messages.ts
import { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs/promises";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const filePath = path.join(
process.cwd(),
"apiMockData",
"SERVICE",
"last20Messages.js"
);
try {
const data = await fs.readFile(filePath, "utf-8");
res.setHeader("Content-Type", "text/javascript"); // wichtig!
res.status(200).send(data);
} catch (error) {
res.status(404).json({ error: "File not found" });
}
}

View File

@@ -0,0 +1,24 @@
// /pages/api/cpl/opcuaSettings.ts
import { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs/promises";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const filePath = path.join(
process.cwd(),
"apiMockData",
"SERVICE",
"opcua.js"
);
try {
const data = await fs.readFile(filePath, "utf-8");
res.status(200).send(data);
} catch (error) {
res.status(404).json({ error: "File not found" });
}
}

View File

@@ -1,3 +1,4 @@
// /pages/api/cpl/slotData.ts
import { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs/promises";

View File

@@ -0,0 +1,24 @@
// /pages/api/cpl/systemSettings.ts
import { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs/promises";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const filePath = path.join(
process.cwd(),
"apiMockData",
"SERVICE",
"system.js"
);
try {
const data = await fs.readFile(filePath, "utf-8");
res.status(200).send(data);
} catch (error) {
res.status(404).json({ error: "File not found" });
}
}

30
pages/api/cpl/tdmData.ts Normal file
View File

@@ -0,0 +1,30 @@
// /pages/api/cpl/tdmData.ts
import { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs/promises";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const { slot } = req.query;
if (!slot) {
return res.status(400).json({ error: "Missing parameter: slot" });
}
const filePath = path.join(
process.cwd(),
"apiMockData",
"TDM",
`slot${slot}.json`
);
try {
const data = await fs.readFile(filePath, "utf-8");
res.status(200).json(JSON.parse(data));
} catch (error) {
res.status(404).json({ error: "File not found" });
}
}

25
pages/api/cpl/tdrData.ts Normal file
View File

@@ -0,0 +1,25 @@
// /pages/api/cpl/tdrData.ts
import { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs/promises";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const { id } = req.query;
if (!id) {
return res.status(400).json({ error: "Missing parameter: id" });
}
const filePath = path.join(process.cwd(), "apiMockData", "TDR", `${id}.json`);
try {
const data = await fs.readFile(filePath, "utf-8");
res.status(200).json(JSON.parse(data));
} catch (error) {
res.status(404).json({ error: "File not found" });
}
}

View File

@@ -1,11 +0,0 @@
// pages/api/test.ts
import { NextApiRequest, NextApiResponse } from "next";
export default function handler(req: NextApiRequest, res: NextApiResponse) {
res.status(200).json({
message: "✅ Die API ist erreichbar!",
method: req.method,
timestamp: new Date().toISOString(),
});
}

View File

@@ -7,7 +7,7 @@ export const fetchAllTDMDataFromServer = async (): Promise<any[]> => {
const slotRequests = Array.from({ length: 32 }, (_, i) => {
const url = isDev
? `/CPLmockData/TDM/slot${i}.json` // ✅ Entwicklung: aus public-Ordner
? `/apiMockData/TDM/slot${i}.json` // ✅ Entwicklung: aus public-Ordner
: `${window.location.origin}/CPL?Service/empty.acp&TDM=${i}`; // ✅ Produktion
return fetch(url)

View File

@@ -4,7 +4,7 @@ export const fetchAllTDRChartDataFromServer = async (): Promise<any[]> => {
const isDev = process.env.NEXT_PUBLIC_NODE_ENV === "development";
const basePath = isDev
? "/CPLmockData/LastTDR/jsonDatei"
? "/apiMockData/LastTDR/jsonDatei"
: "/CPL?/CPL/LastTDR";
const fileNames = Array.from({ length: 32 }, (_, i) => `slot${i}.json`);

View File

@@ -4,7 +4,7 @@ const getTDRReferenceBasePath = () => {
if (typeof window !== "undefined") {
const env = process.env.NEXT_PUBLIC_NODE_ENV;
return env === "development"
? "/CPLMockData/tdr-reference-curves"
? "/apiMockData/tdr-reference-curves"
: "/CPL?/CPL/tdr-reference-curves";
}
return "";

View File

@@ -12,7 +12,7 @@ export const fetchAnalogeEingaenge = async (): Promise<Record<
// Skriptpfad abhängig von der Umgebung
const scriptSrc = isDevelopment
? "/CPLmockData/SERVICE/ae.js"
? "/apiMockData/SERVICE/ae.js"
: "/CPL?/CPL/SERVICE/ae.js";
// Skript dynamisch laden

View File

@@ -6,7 +6,7 @@ export const fetchDigitalOutputs = async () => {
const scriptSrc =
process.env.NEXT_PUBLIC_NODE_ENV === "production"
? "/CPL?/CPL/SERVICE/da.js"
: "/CPLmockData/SERVICE/da.js";
: "/apiMockData/SERVICE/da.js";
await new Promise<void>((resolve, reject) => {
const script = document.createElement("script");

View File

@@ -8,7 +8,7 @@ export const fetchDigitaleEingaenge = async () => {
const scriptSrc =
process.env.NEXT_PUBLIC_NODE_ENV === "production"
? "/CPL?/CPL/SERVICE/de.js"
: "/CPLmockData/SERVICE/de.js";
: "/apiMockData/SERVICE/de.js";
await new Promise<void>((resolve, reject) => {
const script = document.createElement("script");

View File

@@ -5,11 +5,11 @@ export const fetchLast20MessagesFromWindow = async (): Promise<
> => {
if (typeof window === "undefined") return null;
// ✅ Start.js nur bei Bedarf nachladen (Pfad abhängig von Umgebung)
const scriptSrc =
process.env.NEXT_PUBLIC_NODE_ENV === "production"
? "/CPL?/CPL/SERVICE/Start.js"
: "/CPLmockData/SERVICE/Start.js";
const isDev = process.env.NEXT_PUBLIC_NODE_ENV === "development";
const scriptSrc = isDev
? "/api/cpl/last20Messages" // in Dev → per API geladen
: "/CPL?/CPL/SERVICE/Start.js"; // in Prod → echtes Script vom CPL
await new Promise<void>((resolve, reject) => {
const script = document.createElement("script");

View File

@@ -8,7 +8,7 @@ export const fetchOpcUaSettings = async () => {
const scriptSrc =
process.env.NEXT_PUBLIC_NODE_ENV === "production"
? "/CPL?/CPL/SERVICE/opcua.js"
: "/CPLmockData/SERVICE/opcua.js";
: "/apiMockData/SERVICE/opcua.js";
await new Promise<void>((resolve, reject) => {
const script = document.createElement("script");

View File

@@ -6,7 +6,7 @@ export const fetchSystemSettings = async () => {
const isDev = process.env.NODE_ENV === "development";
const scriptSrc =
process.env.NEXT_PUBLIC_NODE_ENV === "development"
? "/CPLmockData/SERVICE/system.js"
? "/apiMockData/SERVICE/system.js"
: "/CPL?/CPL/SERVICE/system.js";
await new Promise<void>((resolve, reject) => {

View File

@@ -6,7 +6,7 @@ export const fetchTDMDataBySlot = async (slot: number): Promise<any> => {
const isDev = process.env.NEXT_PUBLIC_NODE_ENV === "development";
const url = isDev
? `/CPLmockData/TDM/slot${slot}.json`
? `/apiMockData/TDM/slot${slot}.json`
: `${window.location.origin}/CPL?Service/empty.acp&TDM=${slot}`;
try {

View File

@@ -6,7 +6,7 @@ export const fetchTDRChartDataById = async (
const isDev = process.env.NEXT_PUBLIC_NODE_ENV === "development";
const url = isDev
? `http://localhost:3000/CPLmockData/TDR/${id}.json`
? `http://localhost:3000/apiMockData/TDR/${id}.json`
: `${window.location.origin}/CPL?Service/empty.acp&TDR=${id}`;
try {

View File

@@ -13,7 +13,7 @@ export const fetchTDRReferenceCurve = async (
// 🔁 Fallback: Datei oder Produktion-API
const isDev = process.env.NEXT_PUBLIC_NODE_ENV === "development";
const url = isDev
? `/CPLmockData/tdr-reference-curves/slot${slot}.json`
? `/apiMockData/tdr-reference-curves/slot${slot}.json`
: `${window.location.origin}/CPL?Service/empty.acp&TDR=${slot}`;
try {