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(databaseId: string, collectionId: string, queries?: string[]): Promise> { 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} data * @param {string[]} permissions * @throws {AppwriteException} * @returns {Promise} */ async createDocument(databaseId: string, collectionId: string, documentId: string, data: Omit, permissions?: 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"'); } 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(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('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>} data * @param {string[]} permissions * @throws {AppwriteException} * @returns {Promise} */ async updateDocument(databaseId: string, collectionId: string, documentId: string, data?: Partial>, permissions?: 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 = {}; 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); } };