ToolJet/plugins/packages/cosmosdb/lib/operations.ts
Arpit 84e7cef097
[Plugins] CosmosDB integration (#3828)
* init

* cosmos db icon

* manifest file

* adds azure package

* test connection

* operations: list databases

* operation: read item, insert items with a lookup function

* operation: delete item

* operation: query database using SQL-like syntax

* adds unit tests

* adds unit test: query db

* clean up

* docs: cosmosdb

* docs: cleanup

* typo

* updated the image(docs)

* updated inserting operation: field: placeholder

* item id for delete operation

* Revert "item id for delete operation"

This reverts commit bc2d1b87e4.

* item id for delete operation
2022-09-01 23:03:44 +05:30

136 lines
3.6 KiB
TypeScript

import { Container, CosmosClient } from '@azure/cosmos';
export async function listDatabases(client: CosmosClient): Promise<object> {
return new Promise((resolve, reject) => {
client.databases
.readAll({})
.fetchAll()
.then((data) => {
const databases = data.resources.map((db) => db.id);
resolve(databases);
})
.catch((err) => {
reject(err);
})
.finally(() => client.dispose());
});
}
export function listContainers(client: CosmosClient, database: string) {
return new Promise((resolve, reject) => {
lookUpDatabase(client, database)
.then(() => {
client
.database(database)
.containers.readAll()
.fetchAll()
.then((data) => {
const containers = data.resources.map((container) => container.id);
resolve(containers);
})
.catch((err) => {
reject(err);
});
})
.catch((err) => {
reject(err);
})
.finally(() => client.dispose());
});
}
export function insertItems(client: CosmosClient, database: string, containerId: string, items: []) {
return new Promise((resolve, reject) => {
lookUpContainer(client, database, containerId)
.then((container: Container) => {
items.forEach(async (item) => {
await container.items.create(item);
});
resolve({ message: 'Items inserted' });
})
.catch((err) => {
reject(err);
})
.finally(() => client.dispose());
});
}
export function deleteItem(client: CosmosClient, database: string, containerId: string, itemId) {
return new Promise((resolve, reject) => {
lookUpContainer(client, database, containerId)
.then((container: Container) => {
container
.item(itemId)
.delete()
.then(() => {
resolve({ message: 'Item deleted' });
})
.catch((err) => {
reject(err);
});
})
.catch((err) => {
reject(err);
})
.finally(() => client.dispose());
});
}
export function queryDatabase(client: CosmosClient, database: string, containerId: string, query: string) {
return new Promise((resolve, reject) => {
lookUpContainer(client, database, containerId)
.then((container: Container) => {
container.items
.query(query)
.fetchAll()
.then((data) => {
resolve(data.resources);
})
.catch((err) => {
reject(err);
});
})
.catch((err) => {
reject(err);
})
.finally(() => client.dispose());
});
}
export async function getItem(client: CosmosClient, database: string, containerId: string, itemId: string) {
const { container } = await client.database(database).containers.createIfNotExists({ id: containerId });
return (await container.item(itemId).read()).resource;
}
function lookUpContainer(client: CosmosClient, database: string, containerId: string) {
return new Promise((resolve, reject) => {
client
.database(database)
.containers.createIfNotExists({ id: containerId })
.then((data) => {
resolve(data.container);
})
.catch((err) => {
reject(err);
});
});
}
function lookUpDatabase(client: CosmosClient, database: string) {
return new Promise((resolve, reject) => {
client.databases
.createIfNotExists({ id: database })
.then((data) => {
resolve(data);
})
.catch((err) => {
reject(err);
});
})
.catch((err) => {
throw new Error(err);
})
.finally(() => client.dispose());
}