mirror of
https://github.com/versia-pub/server.git
synced 2026-01-26 12:16:01 +01:00
59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import { defineCommand } from "@clerc/core";
|
|
import { config } from "@versia-server/config";
|
|
import { SonicIndexType, searchManager } from "@versia-server/kit/search";
|
|
import ora from "ora";
|
|
|
|
export const rebuildIndexCommand = defineCommand({
|
|
name: "index rebuild",
|
|
description: "Rebuild the search index.",
|
|
parameters: ["<type>"],
|
|
flags: {
|
|
"batch-size": {
|
|
description: "Number of records to process at once",
|
|
type: Number,
|
|
alias: "b",
|
|
default: 100,
|
|
},
|
|
},
|
|
handler: async (context) => {
|
|
const { "batch-size": batchSize } = context.flags;
|
|
const { type } = context.parameters;
|
|
|
|
if (!config.search.enabled) {
|
|
throw new Error(
|
|
"Search is not enabled in the instance configuration.",
|
|
);
|
|
}
|
|
|
|
const spinner = ora("Rebuilding search indexes").start();
|
|
|
|
switch (type) {
|
|
case "accounts":
|
|
await searchManager.rebuildSearchIndexes(
|
|
[SonicIndexType.Accounts],
|
|
batchSize,
|
|
(progress) => {
|
|
spinner.text = `Rebuilding search indexes (${(progress * 100).toFixed(2)}%)`;
|
|
},
|
|
);
|
|
break;
|
|
case "statuses":
|
|
await searchManager.rebuildSearchIndexes(
|
|
[SonicIndexType.Statuses],
|
|
batchSize,
|
|
(progress) => {
|
|
spinner.text = `Rebuilding search indexes (${(progress * 100).toFixed(2)}%)`;
|
|
},
|
|
);
|
|
break;
|
|
default: {
|
|
throw new Error(
|
|
"Invalid index type. Can be 'accounts' or 'statuses'.",
|
|
);
|
|
}
|
|
}
|
|
|
|
spinner.succeed("Search indexes rebuilt");
|
|
},
|
|
});
|