213 lines
8.6 KiB
TypeScript
213 lines
8.6 KiB
TypeScript
import { Service } from '../service';
|
|
import { AppwriteException, Client } from '../client';
|
|
import type { Models } from '../models';
|
|
import type { UploadProgress, Payload } from '../client';
|
|
|
|
export class Databases extends Service {
|
|
|
|
constructor(client: Client)
|
|
{
|
|
super(client);
|
|
}
|
|
|
|
/**
|
|
* List Documents
|
|
*
|
|
* Get a list of all the user's documents in a given collection. You can use
|
|
* the query params to filter your results. On admin mode, this endpoint will
|
|
* return a list of all of documents belonging to the provided collectionId.
|
|
* [Learn more about different API modes](/docs/admin).
|
|
*
|
|
* @param {string} databaseId
|
|
* @param {string} collectionId
|
|
* @param {string[]} queries
|
|
* @throws {AppwriteException}
|
|
* @returns {Promise}
|
|
*/
|
|
async listDocuments<Document extends Models.Document>(databaseId: string, collectionId: string, queries?: string[]): Promise<Models.DocumentList<Document>> {
|
|
if (typeof databaseId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "databaseId"');
|
|
}
|
|
|
|
if (typeof collectionId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "collectionId"');
|
|
}
|
|
|
|
let path = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId);
|
|
let payload: Payload = {};
|
|
|
|
if (typeof queries !== 'undefined') {
|
|
payload['queries'] = queries;
|
|
}
|
|
|
|
const uri = new URL(this.client.config.endpoint + path);
|
|
return await this.client.call('get', uri, {
|
|
'content-type': 'application/json',
|
|
}, payload);
|
|
}
|
|
|
|
/**
|
|
* Create Document
|
|
*
|
|
* Create a new Document. Before using this route, you should create a new
|
|
* collection resource using either a [server
|
|
* integration](/docs/server/databases#databasesCreateCollection) API or
|
|
* directly from your database console.
|
|
*
|
|
* @param {string} databaseId
|
|
* @param {string} collectionId
|
|
* @param {string} documentId
|
|
* @param {Omit<Document, keyof Models.Document>} data
|
|
* @param {string[]} permissions
|
|
* @throws {AppwriteException}
|
|
* @returns {Promise}
|
|
*/
|
|
async createDocument<Document extends Models.Document>(databaseId: string, collectionId: string, documentId: string, data: Omit<Document, keyof Models.Document>, permissions?: string[]): Promise<Document> {
|
|
if (typeof databaseId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "databaseId"');
|
|
}
|
|
|
|
if (typeof collectionId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "collectionId"');
|
|
}
|
|
|
|
if (typeof documentId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "documentId"');
|
|
}
|
|
|
|
if (typeof data === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "data"');
|
|
}
|
|
|
|
let path = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId);
|
|
let payload: Payload = {};
|
|
|
|
if (typeof documentId !== 'undefined') {
|
|
payload['documentId'] = documentId;
|
|
}
|
|
|
|
if (typeof data !== 'undefined') {
|
|
payload['data'] = data;
|
|
}
|
|
|
|
if (typeof permissions !== 'undefined') {
|
|
payload['permissions'] = permissions;
|
|
}
|
|
|
|
const uri = new URL(this.client.config.endpoint + path);
|
|
return await this.client.call('post', uri, {
|
|
'content-type': 'application/json',
|
|
}, payload);
|
|
}
|
|
|
|
/**
|
|
* Get Document
|
|
*
|
|
* Get a document by its unique ID. This endpoint response returns a JSON
|
|
* object with the document data.
|
|
*
|
|
* @param {string} databaseId
|
|
* @param {string} collectionId
|
|
* @param {string} documentId
|
|
* @throws {AppwriteException}
|
|
* @returns {Promise}
|
|
*/
|
|
async getDocument<Document extends Models.Document>(databaseId: string, collectionId: string, documentId: string): Promise<Document> {
|
|
if (typeof databaseId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "databaseId"');
|
|
}
|
|
|
|
if (typeof collectionId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "collectionId"');
|
|
}
|
|
|
|
if (typeof documentId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "documentId"');
|
|
}
|
|
|
|
let path = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);
|
|
let payload: Payload = {};
|
|
|
|
const uri = new URL(this.client.config.endpoint + path);
|
|
return await this.client.call('get', uri, {
|
|
'content-type': 'application/json',
|
|
}, payload);
|
|
}
|
|
|
|
/**
|
|
* Update Document
|
|
*
|
|
* Update a document by its unique ID. Using the patch method you can pass
|
|
* only specific fields that will get updated.
|
|
*
|
|
* @param {string} databaseId
|
|
* @param {string} collectionId
|
|
* @param {string} documentId
|
|
* @param {Partial<Omit<Document, keyof Models.Document>>} data
|
|
* @param {string[]} permissions
|
|
* @throws {AppwriteException}
|
|
* @returns {Promise}
|
|
*/
|
|
async updateDocument<Document extends Models.Document>(databaseId: string, collectionId: string, documentId: string, data?: Partial<Omit<Document, keyof Models.Document>>, permissions?: string[]): Promise<Document> {
|
|
if (typeof databaseId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "databaseId"');
|
|
}
|
|
|
|
if (typeof collectionId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "collectionId"');
|
|
}
|
|
|
|
if (typeof documentId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "documentId"');
|
|
}
|
|
|
|
let path = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);
|
|
let payload: Payload = {};
|
|
|
|
if (typeof data !== 'undefined') {
|
|
payload['data'] = data;
|
|
}
|
|
|
|
if (typeof permissions !== 'undefined') {
|
|
payload['permissions'] = permissions;
|
|
}
|
|
|
|
const uri = new URL(this.client.config.endpoint + path);
|
|
return await this.client.call('patch', uri, {
|
|
'content-type': 'application/json',
|
|
}, payload);
|
|
}
|
|
|
|
/**
|
|
* Delete Document
|
|
*
|
|
* Delete a document by its unique ID.
|
|
*
|
|
* @param {string} databaseId
|
|
* @param {string} collectionId
|
|
* @param {string} documentId
|
|
* @throws {AppwriteException}
|
|
* @returns {Promise}
|
|
*/
|
|
async deleteDocument(databaseId: string, collectionId: string, documentId: string): Promise<{}> {
|
|
if (typeof databaseId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "databaseId"');
|
|
}
|
|
|
|
if (typeof collectionId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "collectionId"');
|
|
}
|
|
|
|
if (typeof documentId === 'undefined') {
|
|
throw new AppwriteException('Missing required parameter: "documentId"');
|
|
}
|
|
|
|
let path = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);
|
|
let payload: Payload = {};
|
|
|
|
const uri = new URL(this.client.config.endpoint + path);
|
|
return await this.client.call('delete', uri, {
|
|
'content-type': 'application/json',
|
|
}, payload);
|
|
}
|
|
};
|