69 lines
1.8 KiB
JavaScript
69 lines
1.8 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 { getSource, listSources } = require("../src/business-logic/import-pipeline/sources");
|
|
|
|
const router = express.Router();
|
|
|
|
router.post("/run", async (req, res) => {
|
|
const { shop, limit = null, source = "kyt" } = req.body || {};
|
|
|
|
if (!shop) {
|
|
return res.status(400).json({ error: "Missing shop." });
|
|
}
|
|
|
|
let sourceConfig;
|
|
try {
|
|
sourceConfig = getSource(source);
|
|
} catch (error) {
|
|
return res.status(400).json({ error: error.message });
|
|
}
|
|
|
|
if (!getToken(shop)) {
|
|
return res.status(400).json({ error: "No stored Shopify token found for this shop. Complete app auth first." });
|
|
}
|
|
|
|
if (!canStartJob(shop, sourceConfig.sourceKey)) {
|
|
return res.status(409).json({ error: `An import job is already running for ${shop} and source ${sourceConfig.sourceKey}.` });
|
|
}
|
|
|
|
const job = createJob({ shop, limit, source: sourceConfig.sourceKey });
|
|
updateJob(job.id, {
|
|
status: "queued",
|
|
step: "queued",
|
|
detail: `${sourceConfig.label} import job queued`,
|
|
});
|
|
|
|
setImmediate(() => {
|
|
runKytPipelineJob(job);
|
|
});
|
|
|
|
return res.json({
|
|
jobId: job.id,
|
|
status: "queued",
|
|
shop,
|
|
source: sourceConfig.sourceKey,
|
|
limit,
|
|
});
|
|
});
|
|
|
|
router.get("/sources", (req, res) => {
|
|
return res.json({ sources: listSources() });
|
|
});
|
|
|
|
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;
|