{"version":3,"file":"enable.mjs","names":[],"sources":["../../../../../src/astro/routes/api/search/enable.ts"],"sourcesContent":["/**\n * Search enable/disable endpoint\n *\n * POST /_emdash/api/search/enable\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, apiSuccess, handleError } from \"#api/error.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\nimport { searchEnableBody } from \"#api/schemas.js\";\nimport { FTSManager } from \"#search/index.js\";\n\nexport const prerender = false;\n\n/**\n * Enable or disable search for a collection\n *\n * Body:\n * - collection: Collection slug (required)\n * - enabled: boolean (required)\n * - weights: Optional field weights for ranking\n * - tokenize: Optional FTS5 tokenizer configuration\n */\nexport const POST: APIRoute = async ({ request, locals }) => {\n\tconst { emdash, user } = locals;\n\n\tif (!emdash?.db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash not configured\", 500);\n\t}\n\n\tconst denied = requirePerm(user, \"search:manage\");\n\tif (denied) return denied;\n\n\tconst body = await parseBody(request, searchEnableBody);\n\tif (isParseError(body)) return body;\n\n\tconst ftsManager = new FTSManager(emdash.db);\n\n\ttry {\n\t\tif (body.enabled) {\n\t\t\t// Enable search - creates FTS table, triggers, and populates index\n\t\t\tawait ftsManager.enableSearch(body.collection, {\n\t\t\t\tweights: body.weights,\n\t\t\t\ttokenize: body.tokenize,\n\t\t\t});\n\n\t\t\tconst stats = await ftsManager.getIndexStats(body.collection);\n\n\t\t\treturn apiSuccess({\n\t\t\t\tcollection: body.collection,\n\t\t\t\tenabled: true,\n\t\t\t\tindexed: stats?.indexed ?? 0,\n\t\t\t});\n\t\t} else {\n\t\t\t// Disable search - drops FTS table and triggers\n\t\t\tawait ftsManager.disableSearch(body.collection);\n\n\t\t\treturn apiSuccess({\n\t\t\t\tcollection: body.collection,\n\t\t\t\tenabled: false,\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to update search config\", \"SEARCH_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAcA,MAAa,YAAY;;;;;;;;;;AAWzB,MAAa,OAAiB,OAAO,EAAE,SAAS,aAAa;CAC5D,MAAM,EAAE,QAAQ,SAAS;AAEzB,KAAI,CAAC,QAAQ,GACZ,QAAO,SAAS,kBAAkB,yBAAyB,IAAI;CAGhE,MAAM,SAAS,YAAY,MAAM,gBAAgB;AACjD,KAAI,OAAQ,QAAO;CAEnB,MAAM,OAAO,MAAM,UAAU,SAAS,iBAAiB;AACvD,KAAI,aAAa,KAAK,CAAE,QAAO;CAE/B,MAAM,aAAa,IAAI,WAAW,OAAO,GAAG;AAE5C,KAAI;AACH,MAAI,KAAK,SAAS;AAEjB,SAAM,WAAW,aAAa,KAAK,YAAY;IAC9C,SAAS,KAAK;IACd,UAAU,KAAK;IACf,CAAC;GAEF,MAAM,QAAQ,MAAM,WAAW,cAAc,KAAK,WAAW;AAE7D,UAAO,WAAW;IACjB,YAAY,KAAK;IACjB,SAAS;IACT,SAAS,OAAO,WAAW;IAC3B,CAAC;SACI;AAEN,SAAM,WAAW,cAAc,KAAK,WAAW;AAE/C,UAAO,WAAW;IACjB,YAAY,KAAK;IACjB,SAAS;IACT,CAAC;;UAEK,OAAO;AACf,SAAO,YAAY,OAAO,kCAAkC,eAAe"}