266 lines
No EOL
8 KiB
JavaScript
266 lines
No EOL
8 KiB
JavaScript
const Service = require('../service.js');
|
|
|
|
class Database extends Service {
|
|
|
|
/**
|
|
* List Collections
|
|
*
|
|
* Get a list of all the user collections. You can use the query params to
|
|
* filter your results. On admin mode, this endpoint will return a list of all
|
|
* of the project collections. [Learn more about different API
|
|
* modes](/docs/modes).
|
|
*
|
|
* @param string search
|
|
* @param number limit
|
|
* @param number offset
|
|
* @param string orderType
|
|
* @throws Exception
|
|
* @return {}
|
|
*/
|
|
async listCollections(search = '', limit = 25, offset = 0, orderType = 'ASC') {
|
|
let path = '/database';
|
|
|
|
return await this.client.call('get', path, {
|
|
'content-type': 'application/json',
|
|
},
|
|
{
|
|
'search': search,
|
|
'limit': limit,
|
|
'offset': offset,
|
|
'orderType': orderType
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Create Collection
|
|
*
|
|
* Create a new Collection.
|
|
*
|
|
* @param string name
|
|
* @param array read
|
|
* @param array write
|
|
* @param array rules
|
|
* @throws Exception
|
|
* @return {}
|
|
*/
|
|
async createCollection(name, read, write, rules) {
|
|
let path = '/database';
|
|
|
|
return await this.client.call('post', path, {
|
|
'content-type': 'application/json',
|
|
},
|
|
{
|
|
'name': name,
|
|
'read': read,
|
|
'write': write,
|
|
'rules': rules
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get Collection
|
|
*
|
|
* Get collection by its unique ID. This endpoint response returns a JSON
|
|
* object with the collection metadata.
|
|
*
|
|
* @param string collectionId
|
|
* @throws Exception
|
|
* @return {}
|
|
*/
|
|
async getCollection(collectionId) {
|
|
let path = '/database/{collectionId}'.replace(new RegExp('{collectionId}', 'g'), collectionId);
|
|
|
|
return await this.client.call('get', path, {
|
|
'content-type': 'application/json',
|
|
},
|
|
{
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Update Collection
|
|
*
|
|
* Update collection by its unique ID.
|
|
*
|
|
* @param string collectionId
|
|
* @param string name
|
|
* @param array read
|
|
* @param array write
|
|
* @param array rules
|
|
* @throws Exception
|
|
* @return {}
|
|
*/
|
|
async updateCollection(collectionId, name, read, write, rules = []) {
|
|
let path = '/database/{collectionId}'.replace(new RegExp('{collectionId}', 'g'), collectionId);
|
|
|
|
return await this.client.call('put', path, {
|
|
'content-type': 'application/json',
|
|
},
|
|
{
|
|
'name': name,
|
|
'read': read,
|
|
'write': write,
|
|
'rules': rules
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Delete Collection
|
|
*
|
|
* Delete a collection by its unique ID. Only users with write permissions
|
|
* have access to delete this resource.
|
|
*
|
|
* @param string collectionId
|
|
* @throws Exception
|
|
* @return {}
|
|
*/
|
|
async deleteCollection(collectionId) {
|
|
let path = '/database/{collectionId}'.replace(new RegExp('{collectionId}', 'g'), collectionId);
|
|
|
|
return await this.client.call('delete', path, {
|
|
'content-type': 'application/json',
|
|
},
|
|
{
|
|
});
|
|
}
|
|
|
|
/**
|
|
* List Documents
|
|
*
|
|
* Get a list of all the user documents. You can use the query params to
|
|
* filter your results. On admin mode, this endpoint will return a list of all
|
|
* of the project documents. [Learn more about different API
|
|
* modes](/docs/modes).
|
|
*
|
|
* @param string collectionId
|
|
* @param array filters
|
|
* @param number offset
|
|
* @param number limit
|
|
* @param string orderField
|
|
* @param string orderType
|
|
* @param string orderCast
|
|
* @param string search
|
|
* @param number first
|
|
* @param number last
|
|
* @throws Exception
|
|
* @return {}
|
|
*/
|
|
async listDocuments(collectionId, filters = [], offset = 0, limit = 50, orderField = '$uid', orderType = 'ASC', orderCast = 'string', search = '', first = 0, last = 0) {
|
|
let path = '/database/{collectionId}/documents'.replace(new RegExp('{collectionId}', 'g'), collectionId);
|
|
|
|
return await this.client.call('get', path, {
|
|
'content-type': 'application/json',
|
|
},
|
|
{
|
|
'filters': filters,
|
|
'offset': offset,
|
|
'limit': limit,
|
|
'order-field': orderField,
|
|
'order-type': orderType,
|
|
'order-cast': orderCast,
|
|
'search': search,
|
|
'first': first,
|
|
'last': last
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Create Document
|
|
*
|
|
* Create a new Document.
|
|
*
|
|
* @param string collectionId
|
|
* @param string data
|
|
* @param array read
|
|
* @param array write
|
|
* @param string parentDocument
|
|
* @param string parentProperty
|
|
* @param string parentPropertyType
|
|
* @throws Exception
|
|
* @return {}
|
|
*/
|
|
async createDocument(collectionId, data, read, write, parentDocument = '', parentProperty = '', parentPropertyType = 'assign') {
|
|
let path = '/database/{collectionId}/documents'.replace(new RegExp('{collectionId}', 'g'), collectionId);
|
|
|
|
return await this.client.call('post', path, {
|
|
'content-type': 'application/json',
|
|
},
|
|
{
|
|
'data': data,
|
|
'read': read,
|
|
'write': write,
|
|
'parentDocument': parentDocument,
|
|
'parentProperty': parentProperty,
|
|
'parentPropertyType': parentPropertyType
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get Document
|
|
*
|
|
* Get document by its unique ID. This endpoint response returns a JSON object
|
|
* with the document data.
|
|
*
|
|
* @param string collectionId
|
|
* @param string documentId
|
|
* @throws Exception
|
|
* @return {}
|
|
*/
|
|
async getDocument(collectionId, documentId) {
|
|
let path = '/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}', 'g'), collectionId).replace(new RegExp('{documentId}', 'g'), documentId);
|
|
|
|
return await this.client.call('get', path, {
|
|
'content-type': 'application/json',
|
|
},
|
|
{
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Update Document
|
|
*
|
|
* @param string collectionId
|
|
* @param string documentId
|
|
* @param string data
|
|
* @param array read
|
|
* @param array write
|
|
* @throws Exception
|
|
* @return {}
|
|
*/
|
|
async updateDocument(collectionId, documentId, data, read, write) {
|
|
let path = '/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}', 'g'), collectionId).replace(new RegExp('{documentId}', 'g'), documentId);
|
|
|
|
return await this.client.call('patch', path, {
|
|
'content-type': 'application/json',
|
|
},
|
|
{
|
|
'data': data,
|
|
'read': read,
|
|
'write': write
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Delete Document
|
|
*
|
|
* Delete document by its unique ID. This endpoint deletes only the parent
|
|
* documents, his attributes and relations to other documents. Child documents
|
|
* **will not** be deleted.
|
|
*
|
|
* @param string collectionId
|
|
* @param string documentId
|
|
* @throws Exception
|
|
* @return {}
|
|
*/
|
|
async deleteDocument(collectionId, documentId) {
|
|
let path = '/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}', 'g'), collectionId).replace(new RegExp('{documentId}', 'g'), documentId);
|
|
|
|
return await this.client.call('delete', path, {
|
|
'content-type': 'application/json',
|
|
},
|
|
{
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = Database; |