feat: wire AMPP folder placer into server — add /api/ampp/place endpoint

This commit is contained in:
Zac Gaetano 2026-04-30 17:17:39 -04:00
parent 77a64455ae
commit 6667f320c5

View file

@ -11,6 +11,7 @@ const fs = require("fs");
const https = require("https"); const https = require("https");
const http = require("http"); const http = require("http");
const archiver = require("archiver"); const archiver = require("archiver");
const { placeAsset } = require("./lib/ampp-folder-placer");
require("events").defaultMaxListeners = 50; require("events").defaultMaxListeners = 50;
@ -808,6 +809,29 @@ app.get("/api/ampp/jobs/:jobId", requireAuth, async (req, res) => {
} catch (err) { res.status(500).json({ success: false, error: err.message }); } } catch (err) { res.status(500).json({ success: false, error: err.message }); }
}); });
// ---- AMPP Folder Placement ----
// POST /api/ampp/place — place an already-ingested AMPP asset into virtual folders.
// Body: { assetId: "...", assetName: "NEWS--PKG--clip.mxf" }
// assetName uses the "--" delimiter convention — same as folder-organizer-v3.5.py.
// Finds or creates the nested AMPP folder hierarchy, then links the asset to the
// deepest folder. All v3.5 defensive guards are ported to Node.js (see ampp-folder-placer.js).
app.post("/api/ampp/place", requireAuth, async (req, res) => {
const { assetId, assetName } = req.body;
if (!assetId || !assetName)
return res.status(400).json({ success: false, error: "assetId and assetName are required" });
if (!getAmppApiKey())
return res.status(503).json({ success: false, error: "AMPP API key not configured" });
try {
const token = await getAmppToken();
const result = await placeAsset(getAmppBase(), assetName, assetId, token);
console.log(`[AMPP place] ${assetName} (${assetId}) → ${JSON.stringify(result)}`);
res.json({ success: true, ...result });
} catch (err) {
console.error("[AMPP place] Error:", err.message);
res.status(500).json({ success: false, error: err.message });
}
});
// ==================== CHROME EXTENSION DOWNLOAD ==================== // ==================== CHROME EXTENSION DOWNLOAD ====================
// ==================== SHARE LINKS ==================== // ==================== SHARE LINKS ====================
app.get("/api/sharelinks", requireAdmin, (req, res) => { app.get("/api/sharelinks", requireAdmin, (req, res) => {