{"version":3,"file":"_name_.mjs","names":[],"sources":["../../../../../src/astro/routes/api/taxonomies/[name].ts"],"sourcesContent":["/**\n * Single taxonomy definition endpoint\n *\n * GET    /_emdash/api/taxonomies/:name[?locale=xx]\n * PUT    /_emdash/api/taxonomies/:name[?locale=xx]\n * DELETE /_emdash/api/taxonomies/:name\n *\n * GET and PUT address one locale's definition. DELETE takes no locale — it\n * removes the taxonomy outright, terms and assignments included.\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, handleError, requireDb, unwrapResult } from \"#api/error.js\";\nimport {\n\thandleTaxonomyDelete,\n\thandleTaxonomyGet,\n\thandleTaxonomyUpdate,\n} from \"#api/handlers/taxonomies.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { localeFilterQuery, updateTaxonomyDefBody } from \"#api/schemas.js\";\n\nexport const prerender = false;\n\n/**\n * Get a single taxonomy definition\n */\nexport const GET: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { name } = params;\n\tif (!name) return apiError(\"VALIDATION_ERROR\", \"Taxonomy name required\", 400);\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\tconst denied = requirePerm(user, \"taxonomies:read\");\n\tif (denied) return denied;\n\n\tconst query = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(query)) return query;\n\n\ttry {\n\t\tconst result = await handleTaxonomyGet(emdash.db, name, { locale: query.locale });\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to get taxonomy\", \"TAXONOMY_GET_ERROR\");\n\t}\n};\n\n/**\n * Update a taxonomy definition\n */\nexport const PUT: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { name } = params;\n\tif (!name) return apiError(\"VALIDATION_ERROR\", \"Taxonomy name required\", 400);\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\tconst denied = requirePerm(user, \"taxonomies:manage\");\n\tif (denied) return denied;\n\n\tconst query = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(query)) return query;\n\n\ttry {\n\t\tconst body = await parseBody(request, updateTaxonomyDefBody);\n\t\tif (isParseError(body)) return body;\n\n\t\tconst result = await handleTaxonomyUpdate(emdash.db, name, {\n\t\t\t...body,\n\t\t\tlocale: query.locale,\n\t\t});\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to update taxonomy\", \"TAXONOMY_UPDATE_ERROR\");\n\t}\n};\n\n/**\n * Delete a taxonomy, its terms, and their content assignments\n */\nexport const DELETE: APIRoute = async ({ params, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { name } = params;\n\tif (!name) return apiError(\"VALIDATION_ERROR\", \"Taxonomy name required\", 400);\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\tconst denied = requirePerm(user, \"taxonomies:manage\");\n\tif (denied) return denied;\n\n\ttry {\n\t\tconst result = await handleTaxonomyDelete(emdash.db, name);\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to delete taxonomy\", \"TAXONOMY_DELETE_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAa,YAAY;;;;AAKzB,MAAa,MAAgB,OAAO,EAAE,QAAQ,SAAS,aAAa;CACnE,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,EAAE,SAAS;AACjB,KAAI,CAAC,KAAM,QAAO,SAAS,oBAAoB,0BAA0B,IAAI;CAE7E,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACnC,KAAI,MAAO,QAAO;CAElB,MAAM,SAAS,YAAY,MAAM,kBAAkB;AACnD,KAAI,OAAQ,QAAO;CAEnB,MAAM,QAAQ,WAAW,IAAI,IAAI,QAAQ,IAAI,EAAE,kBAAkB;AACjE,KAAI,aAAa,MAAM,CAAE,QAAO;AAEhC,KAAI;AAEH,SAAO,aADQ,MAAM,kBAAkB,OAAO,IAAI,MAAM,EAAE,QAAQ,MAAM,QAAQ,CAAC,CACtD;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,0BAA0B,qBAAqB;;;;;;AAO3E,MAAa,MAAgB,OAAO,EAAE,QAAQ,SAAS,aAAa;CACnE,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,EAAE,SAAS;AACjB,KAAI,CAAC,KAAM,QAAO,SAAS,oBAAoB,0BAA0B,IAAI;CAE7E,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACnC,KAAI,MAAO,QAAO;CAElB,MAAM,SAAS,YAAY,MAAM,oBAAoB;AACrD,KAAI,OAAQ,QAAO;CAEnB,MAAM,QAAQ,WAAW,IAAI,IAAI,QAAQ,IAAI,EAAE,kBAAkB;AACjE,KAAI,aAAa,MAAM,CAAE,QAAO;AAEhC,KAAI;EACH,MAAM,OAAO,MAAM,UAAU,SAAS,sBAAsB;AAC5D,MAAI,aAAa,KAAK,CAAE,QAAO;AAM/B,SAAO,aAJQ,MAAM,qBAAqB,OAAO,IAAI,MAAM;GAC1D,GAAG;GACH,QAAQ,MAAM;GACd,CAAC,CACyB;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,6BAA6B,wBAAwB;;;;;;AAOjF,MAAa,SAAmB,OAAO,EAAE,QAAQ,aAAa;CAC7D,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,EAAE,SAAS;AACjB,KAAI,CAAC,KAAM,QAAO,SAAS,oBAAoB,0BAA0B,IAAI;CAE7E,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACnC,KAAI,MAAO,QAAO;CAElB,MAAM,SAAS,YAAY,MAAM,oBAAoB;AACrD,KAAI,OAAQ,QAAO;AAEnB,KAAI;AAEH,SAAO,aADQ,MAAM,qBAAqB,OAAO,IAAI,KAAK,CAC/B;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,6BAA6B,wBAAwB"}