@flowselections/logistiek-engine 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/lib/bulkLoadCarrierPlanning.server.d.ts +4 -3
- package/dist-lib/lib/bulkLoadCarrierPlanning.server.d.ts.map +1 -1
- package/dist-lib/lib/bulkLoadCarrierPlanning.server.js +13 -15
- package/dist-lib/lib/handlers/logistics-tick.server.d.ts +2 -1
- package/dist-lib/lib/handlers/logistics-tick.server.d.ts.map +1 -1
- package/dist-lib/lib/handlers/logistics-tick.server.js +3 -2
- package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +30 -5
- package/dist-lib/lib/loadCarrierPlanning.functions.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.functions.js +13 -8
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts +7 -6
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.server.js +31 -33
- package/dist-lib/lib/loadCarrierTaskSync.server.d.ts +2 -1
- package/dist-lib/lib/loadCarrierTaskSync.server.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierTaskSync.server.js +4 -6
- package/dist-lib/lib/logisticsRecalcJob.functions.d.ts.map +1 -1
- package/dist-lib/lib/logisticsRecalcJob.functions.js +4 -2
- package/dist-lib/lib/logisticsRecalcJob.server.d.ts +6 -5
- package/dist-lib/lib/logisticsRecalcJob.server.d.ts.map +1 -1
- package/dist-lib/lib/logisticsRecalcJob.server.js +17 -19
- package/package.json +1 -1
|
@@ -7,15 +7,17 @@ export const startRecalcJob = createServerFn({ method: "POST" })
|
|
|
7
7
|
.middleware([requireSupabaseAuth])
|
|
8
8
|
.inputValidator((data) => data ?? {})
|
|
9
9
|
.handler(async ({ data, context }) => {
|
|
10
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
10
11
|
const { startJob } = await import("./logisticsRecalcJob.server");
|
|
11
|
-
const job = await startJob(context.userId ?? null, data.strategyId ?? null);
|
|
12
|
+
const job = await startJob(supabaseAdmin, context.userId ?? null, data.strategyId ?? null);
|
|
12
13
|
return { id: job.id, status: job.status, phase: job.phase };
|
|
13
14
|
});
|
|
14
15
|
export const tickRecalcJob = createServerFn({ method: "POST" })
|
|
15
16
|
.middleware([requireSupabaseAuth])
|
|
16
17
|
.handler(async () => {
|
|
18
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
17
19
|
const { tickJob } = await import("./logisticsRecalcJob.server");
|
|
18
|
-
const job = await tickJob();
|
|
20
|
+
const job = await tickJob(supabaseAdmin);
|
|
19
21
|
return job
|
|
20
22
|
? {
|
|
21
23
|
id: job.id,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
1
2
|
export interface RecalcJob {
|
|
2
3
|
id: string;
|
|
3
4
|
status: "running" | "done" | "error";
|
|
@@ -17,14 +18,14 @@ export interface RecalcJob {
|
|
|
17
18
|
finished_at: string | null;
|
|
18
19
|
updated_at: string;
|
|
19
20
|
}
|
|
20
|
-
export declare function getRunningJob(): Promise<RecalcJob | null>;
|
|
21
|
-
export declare function getLatestJob(): Promise<RecalcJob | null>;
|
|
21
|
+
export declare function getRunningJob(sb: SupabaseClient): Promise<RecalcJob | null>;
|
|
22
|
+
export declare function getLatestJob(sb: SupabaseClient): Promise<RecalcJob | null>;
|
|
22
23
|
/** Start een nieuwe job, of geeft de al lopende job terug. */
|
|
23
|
-
export declare function startJob(startedBy: string | null, strategyId: string | null): Promise<RecalcJob>;
|
|
24
|
+
export declare function startJob(sb: SupabaseClient, startedBy: string | null, strategyId: string | null): Promise<RecalcJob>;
|
|
24
25
|
/** Verwerkt één batch van de lopende job. Geeft de bijgewerkte job terug. */
|
|
25
|
-
export declare function tickJob(): Promise<RecalcJob | null>;
|
|
26
|
+
export declare function tickJob(sb: SupabaseClient): Promise<RecalcJob | null>;
|
|
26
27
|
/** Draait de afsluitende herberekenstappen (planning, tellingen, capaciteit). */
|
|
27
|
-
export declare function runFinalSteps(days?: number): Promise<{
|
|
28
|
+
export declare function runFinalSteps(sb: SupabaseClient, days?: number): Promise<{
|
|
28
29
|
step: string;
|
|
29
30
|
ok: boolean;
|
|
30
31
|
error?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logisticsRecalcJob.server.d.ts","sourceRoot":"","sources":["../../src/lib/logisticsRecalcJob.server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logisticsRecalcJob.server.d.ts","sourceRoot":"","sources":["../../src/lib/logisticsRecalcJob.server.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAM5D,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;IACzC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAGjF;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAOhF;AAED,8DAA8D;AAC9D,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,cAAc,EAClB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,OAAO,CAAC,SAAS,CAAC,CAsBpB;AAED,6EAA6E;AAC7E,wBAAsB,OAAO,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA2C3E;AAED,iFAAiF;AACjF,wBAAsB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,SAAK;UAiBpC,MAAM;QAAM,OAAO;YAAU,MAAM;KAM/D"}
|
|
@@ -5,17 +5,15 @@
|
|
|
5
5
|
// batch, zodat er nooit een timeout ontstaat en de job doorloopt ook als de
|
|
6
6
|
// gebruiker de pagina verlaat.
|
|
7
7
|
// ============================================================================
|
|
8
|
-
import {
|
|
9
|
-
import { planBuffersBatch, planLooseOrdersBatch } from "./bulkLoadCarrierPlanning.server";
|
|
10
|
-
const db = () => supabaseAdmin;
|
|
8
|
+
import { planBuffersBatch, planLooseOrdersBatch } from "./bulkLoadCarrierPlanning.server.js";
|
|
11
9
|
const TABLE = "logistics_recalc_jobs";
|
|
12
10
|
const BATCH = 20;
|
|
13
|
-
export async function getRunningJob() {
|
|
14
|
-
const { data } = await
|
|
11
|
+
export async function getRunningJob(sb) {
|
|
12
|
+
const { data } = await sb.from(TABLE).select("*").eq("status", "running").limit(1);
|
|
15
13
|
return Array.isArray(data) && data.length > 0 ? data[0] : null;
|
|
16
14
|
}
|
|
17
|
-
export async function getLatestJob() {
|
|
18
|
-
const { data } = await
|
|
15
|
+
export async function getLatestJob(sb) {
|
|
16
|
+
const { data } = await sb
|
|
19
17
|
.from(TABLE)
|
|
20
18
|
.select("*")
|
|
21
19
|
.order("created_at", { ascending: false })
|
|
@@ -23,11 +21,11 @@ export async function getLatestJob() {
|
|
|
23
21
|
return Array.isArray(data) && data.length > 0 ? data[0] : null;
|
|
24
22
|
}
|
|
25
23
|
/** Start een nieuwe job, of geeft de al lopende job terug. */
|
|
26
|
-
export async function startJob(startedBy, strategyId) {
|
|
27
|
-
const running = await getRunningJob();
|
|
24
|
+
export async function startJob(sb, startedBy, strategyId) {
|
|
25
|
+
const running = await getRunningJob(sb);
|
|
28
26
|
if (running)
|
|
29
27
|
return running;
|
|
30
|
-
const { data, error } = await
|
|
28
|
+
const { data, error } = await sb
|
|
31
29
|
.from(TABLE)
|
|
32
30
|
.insert({
|
|
33
31
|
status: "running",
|
|
@@ -39,7 +37,7 @@ export async function startJob(startedBy, strategyId) {
|
|
|
39
37
|
.single();
|
|
40
38
|
if (error) {
|
|
41
39
|
// Race: iemand anders startte net een job.
|
|
42
|
-
const existing = await getRunningJob();
|
|
40
|
+
const existing = await getRunningJob(sb);
|
|
43
41
|
if (existing)
|
|
44
42
|
return existing;
|
|
45
43
|
throw new Error(error.message);
|
|
@@ -47,8 +45,8 @@ export async function startJob(startedBy, strategyId) {
|
|
|
47
45
|
return data;
|
|
48
46
|
}
|
|
49
47
|
/** Verwerkt één batch van de lopende job. Geeft de bijgewerkte job terug. */
|
|
50
|
-
export async function tickJob() {
|
|
51
|
-
const job = await getRunningJob();
|
|
48
|
+
export async function tickJob(sb) {
|
|
49
|
+
const job = await getRunningJob(sb);
|
|
52
50
|
if (!job)
|
|
53
51
|
return null;
|
|
54
52
|
const patch = { last_tick_at: new Date().toISOString() };
|
|
@@ -56,8 +54,8 @@ export async function tickJob() {
|
|
|
56
54
|
try {
|
|
57
55
|
if (job.phase === "buffers" || job.phase === "orders") {
|
|
58
56
|
const batch = job.phase === "buffers"
|
|
59
|
-
? await planBuffersBatch(job.cursor, BATCH)
|
|
60
|
-
: await planLooseOrdersBatch(job.cursor, BATCH);
|
|
57
|
+
? await planBuffersBatch(sb, job.cursor, BATCH)
|
|
58
|
+
: await planLooseOrdersBatch(sb, job.cursor, BATCH);
|
|
61
59
|
patch['processed'] = job.processed + batch.processed;
|
|
62
60
|
patch['carts_created'] = job.carts_created + batch.cartsCreated;
|
|
63
61
|
patch['skipped_locked'] = job.skipped_locked + batch.skippedLocked;
|
|
@@ -76,7 +74,7 @@ export async function tickJob() {
|
|
|
76
74
|
}
|
|
77
75
|
}
|
|
78
76
|
else {
|
|
79
|
-
const steps = await runFinalSteps();
|
|
77
|
+
const steps = await runFinalSteps(sb);
|
|
80
78
|
patch['steps'] = steps;
|
|
81
79
|
patch['status'] = steps.every((s) => s.ok) ? "done" : "error";
|
|
82
80
|
patch['finished_at'] = new Date().toISOString();
|
|
@@ -88,11 +86,11 @@ export async function tickJob() {
|
|
|
88
86
|
patch['status'] = "error";
|
|
89
87
|
patch['finished_at'] = new Date().toISOString();
|
|
90
88
|
}
|
|
91
|
-
const { data } = await
|
|
89
|
+
const { data } = await sb.from(TABLE).update(patch).eq("id", job.id).select("*").single();
|
|
92
90
|
return (data ?? null);
|
|
93
91
|
}
|
|
94
92
|
/** Draait de afsluitende herberekenstappen (planning, tellingen, capaciteit). */
|
|
95
|
-
export async function runFinalSteps(days = 21) {
|
|
93
|
+
export async function runFinalSteps(sb, days = 21) {
|
|
96
94
|
const today = new Date();
|
|
97
95
|
const until = new Date(today.getTime() + days * 24 * 60 * 60 * 1000);
|
|
98
96
|
const iso = (d) => d.toISOString().slice(0, 10);
|
|
@@ -109,7 +107,7 @@ export async function runFinalSteps(days = 21) {
|
|
|
109
107
|
];
|
|
110
108
|
const steps = [];
|
|
111
109
|
for (const call of calls) {
|
|
112
|
-
const { error } = await
|
|
110
|
+
const { error } = await sb.rpc(call.fn, call.args);
|
|
113
111
|
steps.push({ step: call.step, ok: !error, ...(error ? { error: error.message } : {}) });
|
|
114
112
|
}
|
|
115
113
|
return steps;
|