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.
50 lines (43 loc) • 1.86 kB
text/typescript
import { Databases, Query, type Models } 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: Databases
): Promise<Models.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: Databases,
databaseId: string
): Promise<{ collectionId: string; collectionName: string }[]> => {
MessageFormatter.info(`Wiping database: ${databaseId}`, { prefix: "Database" });
const existingCollections = await fetchAllCollections(databaseId, database);
let collectionsDeleted: { collectionId: string; collectionName: string }[] =
[];
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;
};