From e25e63b3f0b9ea59c8ab954cfda8a1d974e2d439 Mon Sep 17 00:00:00 2001 From: ZGaetano Date: Sat, 18 Apr 2026 13:42:08 -0400 Subject: [PATCH] =?UTF-8?q?feat:=20AMPP=20folder=20sync=20integration=20?= =?UTF-8?q?=E2=80=94=20pre-create=20folder=20hierarchy=20on=20upload,=20ex?= =?UTF-8?q?pose=20lookup=20endpoint=20for=20Script=20Task:=20ampp.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/mam-api/src/routes/ampp.js | 35 +++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 services/mam-api/src/routes/ampp.js diff --git a/services/mam-api/src/routes/ampp.js b/services/mam-api/src/routes/ampp.js new file mode 100644 index 0000000..2155c47 --- /dev/null +++ b/services/mam-api/src/routes/ampp.js @@ -0,0 +1,35 @@ +import express from 'express'; +import pool from '../db/pool.js'; + +const router = express.Router(); +// No session auth — called from AMPP Script Task inside broadcast network + +/** + * GET /api/v1/ampp/folder-for/:filename + * + * Returns the pre-created AMPP folder:id for a given asset filename. + * Called by the simplified AMPP Script Task after ingest to link the asset + * without having to parse filename prefixes or create folders itself. + * + * 200: { folder_id: "abc123" } + * 404: { error: "..." } (file not uploaded through Dragon-Wind — handle gracefully) + */ +router.get('/folder-for/:filename', async (req, res, next) => { + try { + const { filename } = req.params; + const result = await pool.query( + `SELECT ampp_folder_id FROM assets + WHERE filename = $1 AND ampp_folder_id IS NOT NULL + ORDER BY created_at DESC LIMIT 1`, + [filename] + ); + if (result.rows.length === 0) { + return res.status(404).json({ error: 'No AMPP folder mapping found for this filename' }); + } + res.json({ folder_id: result.rows[0].ampp_folder_id }); + } catch (err) { + next(err); + } +}); + +export default router;