@penkov/tasks_queue
Version:
A lightweight PostgreSQL-backed task queue system with scheduling, retries, backoff strategies, and priority handling. Designed for efficiency and observability in modern Node.js applications.
41 lines (40 loc) • 1.57 kB
JavaScript
import { none, option } from "scats";
import { ActiveChildState } from "./active-child-state.js";
export class MultiStepPayload {
activeChild;
workflowPayload;
userPayload;
static forUserPayload(userPayload) {
return new MultiStepPayload(none, {}, userPayload);
}
constructor(activeChild, workflowPayload, userPayload) {
this.activeChild = activeChild;
this.workflowPayload = workflowPayload;
this.userPayload = userPayload;
}
copy(o) {
return new MultiStepPayload(option(o.activeChild).getOrElseValue(this.activeChild), option(o.workflowPayload).getOrElseValue(this.workflowPayload), option(o.userPayload).getOrElseValue(this.userPayload));
}
get toJson() {
const res = {
workflowPayload: this.workflowPayload,
userPayload: this.userPayload,
};
this.activeChild.foreach((activeChild) => {
res["activeChild"] = activeChild.toJson;
});
return res;
}
static fromJson(j) {
const o = option(j).map((x) => x);
return new MultiStepPayload(o.flatMap((x) => ActiveChildState.fromJson(x["activeChild"]).match({
some: (activeChild) => option(activeChild),
none: () => option(x["activeChildId"]).map((taskId) => new ActiveChildState(Number(taskId))),
})), o
.flatMap((x) => option(x["workflowPayload"]))
.map((x) => x)
.getOrElseValue({}), o
.flatMap((x) => option(x["userPayload"]))
.getOrElseValue({}));
}
}