56 lines
1.3 KiB
JavaScript
56 lines
1.3 KiB
JavaScript
const express = require("express");
|
|
const { createJob, updateJob, getJob, listJobs, canStartJob } = require("../src/pipelineJobs");
|
|
const { runKytPipelineJob } = require("../src/runKytPipelineJob");
|
|
const { getToken } = require("../tokenStore");
|
|
|
|
const router = express.Router();
|
|
|
|
router.post("/run", async (req, res) => {
|
|
const { shop, limit = null } = req.body || {};
|
|
|
|
if (!shop) {
|
|
return res.status(400).json({ error: "Missing shop." });
|
|
}
|
|
|
|
if (!getToken(shop)) {
|
|
return res.status(400).json({ error: "No stored Shopify token found for this shop. Complete app auth first." });
|
|
}
|
|
|
|
if (!canStartJob(shop)) {
|
|
return res.status(409).json({ error: `A KYT pipeline job is already running for ${shop}.` });
|
|
}
|
|
|
|
const job = createJob({ shop, limit });
|
|
updateJob(job.id, {
|
|
status: "queued",
|
|
step: "queued",
|
|
detail: "Job queued",
|
|
});
|
|
|
|
setImmediate(() => {
|
|
runKytPipelineJob(job);
|
|
});
|
|
|
|
return res.json({
|
|
jobId: job.id,
|
|
status: "queued",
|
|
shop,
|
|
limit,
|
|
});
|
|
});
|
|
|
|
router.get("/status/:jobId", (req, res) => {
|
|
const job = getJob(req.params.jobId);
|
|
if (!job) {
|
|
return res.status(404).json({ error: "Job not found." });
|
|
}
|
|
|
|
return res.json(job);
|
|
});
|
|
|
|
router.get("/jobs", (req, res) => {
|
|
return res.json({ jobs: listJobs() });
|
|
});
|
|
|
|
module.exports = router;
|