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.
46 lines (45 loc) • 2.46 kB
JavaScript
import { Databases, Query } from "node-appwrite";
import { tryAwaitWithRetry } from "../utils/index.js";
import {} from "appwrite-utils";
import { ulid } from "ulidx";
import { MessageFormatter } from "../shared/messageFormatter.js";
export const ensureDatabasesExist = async (config, databasesToEnsure) => {
if (!config.appwriteClient) {
throw new Error("Appwrite client is not initialized in the config");
}
const database = new Databases(config.appwriteClient);
const databasesToCreate = databasesToEnsure || config.databases || [];
if (!databasesToCreate.length) {
MessageFormatter.info("No databases to create");
return;
}
const existingDatabases = await tryAwaitWithRetry(async () => await database.list([Query.limit(500)]));
for (const db of databasesToCreate) {
if (!existingDatabases.databases.some((d) => d.name === db.name)) {
await tryAwaitWithRetry(async () => await database.create(db.$id || ulid(), db.name, true));
MessageFormatter.success(`${db.name} database created`);
}
}
};
export const wipeOtherDatabases = async (database, databasesToKeep) => {
MessageFormatter.info(`Databases to keep: ${databasesToKeep.map(db => db.name).join(", ")}`);
const allDatabases = await tryAwaitWithRetry(async () => await database.list([Query.limit(500)]));
for (const db of allDatabases.databases) {
if (!databasesToKeep.some((d) => d.name === db.name)) {
await tryAwaitWithRetry(async () => await database.delete(db.$id));
MessageFormatter.success(`Deleted database: ${db.name}`);
}
}
};
export const ensureCollectionsExist = async (config, database, collectionsToEnsure) => {
const databaseClient = new Databases(config.appwriteClient);
const collectionsToCreate = collectionsToEnsure ||
(config.collections ? config.collections : []);
const existingCollections = await tryAwaitWithRetry(async () => await databaseClient.listCollections(database.$id, [Query.limit(500)]));
for (const collection of collectionsToCreate) {
if (!existingCollections.collections.some((c) => c.name === collection.name)) {
await tryAwaitWithRetry(async () => await databaseClient.createCollection(database.$id, ulid(), collection.name, undefined, true, true));
MessageFormatter.success(`${collection.name} collection created in ${database.name}`);
}
}
};