UNPKG

appwrite

Version:

Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API

217 lines (182 loc) 8.2 kB
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. * * @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"'); } const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId); const payload: Payload = {}; if (typeof queries !== 'undefined') { payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); 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](https://appwrite.io/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"'); } const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId); const 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 + apiPath); 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 * @param {string[]} queries * @throws {AppwriteException} * @returns {Promise} */ async getDocument<Document extends Models.Document>(databaseId: string, collectionId: string, documentId: string, queries?: 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"'); } const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId); const payload: Payload = {}; if (typeof queries !== 'undefined') { payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); 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"'); } const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId); const payload: Payload = {}; if (typeof data !== 'undefined') { payload['data'] = data; } if (typeof permissions !== 'undefined') { payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); 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"'); } const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId); const payload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); return await this.client.call('delete', uri, { 'content-type': 'application/json', }, payload); } };