{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/relations/[id]/index.ts"],"sourcesContent":["/**\n * Single relation definition endpoint\n *\n * GET    /_emdash/api/relations/:id - Get a relation\n * PATCH  /_emdash/api/relations/:id - Update a relation's labels\n * DELETE /_emdash/api/relations/:id - Delete a relation\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\thandleRelationDelete,\n\thandleRelationGet,\n\thandleRelationUpdate,\n} from \"#api/handlers/relations.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\nimport { updateRelationBody } from \"#api/schemas.js\";\n\nexport const prerender = false;\n\nexport const GET: APIRoute = async ({ params, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { id } = params;\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\tconst denied = requirePerm(user, \"schema:read\");\n\tif (denied) return denied;\n\n\tif (!id) return apiError(\"VALIDATION_ERROR\", \"Relation id required\", 400);\n\n\ttry {\n\t\tconst result = await handleRelationGet(emdash.db, id);\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to get relation\", \"RELATION_GET_ERROR\");\n\t}\n};\n\nexport const PATCH: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { id } = params;\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\tconst denied = requirePerm(user, \"schema:manage\");\n\tif (denied) return denied;\n\n\tif (!id) return apiError(\"VALIDATION_ERROR\", \"Relation id required\", 400);\n\n\ttry {\n\t\tconst body = await parseBody(request, updateRelationBody);\n\t\tif (isParseError(body)) return body;\n\n\t\tconst result = await handleRelationUpdate(emdash.db, id, body);\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to update relation\", \"RELATION_UPDATE_ERROR\");\n\t}\n};\n\nexport const DELETE: APIRoute = async ({ params, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { id } = params;\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\tconst denied = requirePerm(user, \"schema:manage\");\n\tif (denied) return denied;\n\n\tif (!id) return apiError(\"VALIDATION_ERROR\", \"Relation id required\", 400);\n\n\ttry {\n\t\tconst result = await handleRelationDelete(emdash.db, id);\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to delete relation\", \"RELATION_DELETE_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAoBA,MAAa,YAAY;AAEzB,MAAa,MAAgB,OAAO,EAAE,QAAQ,aAAa;CAC1D,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,EAAE,OAAO;CAEf,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACnC,KAAI,MAAO,QAAO;CAElB,MAAM,SAAS,YAAY,MAAM,cAAc;AAC/C,KAAI,OAAQ,QAAO;AAEnB,KAAI,CAAC,GAAI,QAAO,SAAS,oBAAoB,wBAAwB,IAAI;AAEzE,KAAI;AAEH,SAAO,aADQ,MAAM,kBAAkB,OAAO,IAAI,GAAG,CAC1B;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,0BAA0B,qBAAqB;;;AAI3E,MAAa,QAAkB,OAAO,EAAE,QAAQ,SAAS,aAAa;CACrE,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,EAAE,OAAO;CAEf,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACnC,KAAI,MAAO,QAAO;CAElB,MAAM,SAAS,YAAY,MAAM,gBAAgB;AACjD,KAAI,OAAQ,QAAO;AAEnB,KAAI,CAAC,GAAI,QAAO,SAAS,oBAAoB,wBAAwB,IAAI;AAEzE,KAAI;EACH,MAAM,OAAO,MAAM,UAAU,SAAS,mBAAmB;AACzD,MAAI,aAAa,KAAK,CAAE,QAAO;AAG/B,SAAO,aADQ,MAAM,qBAAqB,OAAO,IAAI,IAAI,KAAK,CACnC;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,6BAA6B,wBAAwB;;;AAIjF,MAAa,SAAmB,OAAO,EAAE,QAAQ,aAAa;CAC7D,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,EAAE,OAAO;CAEf,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACnC,KAAI,MAAO,QAAO;CAElB,MAAM,SAAS,YAAY,MAAM,gBAAgB;AACjD,KAAI,OAAQ,QAAO;AAEnB,KAAI,CAAC,GAAI,QAAO,SAAS,oBAAoB,wBAAwB,IAAI;AAEzE,KAAI;AAEH,SAAO,aADQ,MAAM,qBAAqB,OAAO,IAAI,GAAG,CAC7B;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,6BAA6B,wBAAwB"}