appwrite-utils-cli
Version:
Appwrite Utility Functions to help with database management, data conversion, data import, migrations, and much more. Meant to be used as a CLI tool, I do not recommend installing this in frontend environments.
36 lines (35 loc) • 1.69 kB
JavaScript
import { Databases, Query } from "node-appwrite";
import { delay, tryAwaitWithRetry } from "../utils/helperFunctions.js";
import { fetchAllCollections } from "../collections/methods.js";
import { MessageFormatter } from "../shared/messageFormatter.js";
export const fetchAllDatabases = async (database) => {
const databases = await tryAwaitWithRetry(async () => await database.list([Query.limit(25)]));
const allDatabases = databases.databases;
if (allDatabases.length === 0)
return [];
let lastDatabaseId = allDatabases[allDatabases.length - 1].$id;
while (databases.databases.length === 25) {
const moreDatabases = await database.list([
Query.limit(25),
Query.cursorAfter(lastDatabaseId),
]);
allDatabases.push(...moreDatabases.databases);
if (moreDatabases.databases.length < 25)
break;
lastDatabaseId =
moreDatabases.databases[moreDatabases.databases.length - 1].$id;
}
return allDatabases;
};
export const wipeDatabase = async (database, databaseId) => {
MessageFormatter.info(`Wiping database: ${databaseId}`, { prefix: "Database" });
const existingCollections = await fetchAllCollections(databaseId, database);
let collectionsDeleted = [];
for (const { $id: collectionId, name } of existingCollections) {
MessageFormatter.info(`Deleting collection: ${collectionId}`, { prefix: "Database" });
collectionsDeleted.push({ collectionId, collectionName: name });
await tryAwaitWithRetry(async () => await database.deleteCollection(databaseId, collectionId));
await delay(100);
}
return collectionsDeleted;
};