diff --git a/docs/examples/databases/create-documents.md b/docs/examples/databases/upsert-document.md similarity index 56% rename from docs/examples/databases/create-documents.md rename to docs/examples/databases/upsert-document.md index 9535537..398a99c 100644 --- a/docs/examples/databases/create-documents.md +++ b/docs/examples/databases/upsert-document.md @@ -2,12 +2,14 @@ import 'package:appwrite/appwrite.dart'; Client client = Client() .setEndpoint('https://.cloud.appwrite.io/v1') // Your API Endpoint - .setKey(''); // + .setProject(''); // Your project ID Databases databases = Databases(client); -DocumentList result = await databases.createDocuments( +Document result = await databases.upsertDocument( databaseId: '', collectionId: '', - documents: [], + documentId: '', + data: {}, + permissions: ["read("any")"], // optional ); diff --git a/lib/services/databases.dart b/lib/services/databases.dart index 7b26101..5c91e99 100644 --- a/lib/services/databases.dart +++ b/lib/services/databases.dart @@ -48,27 +48,6 @@ class Databases extends Service { } - /// Create new Documents. 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. - Future createDocuments({required String databaseId, required String collectionId, required List documents}) async { - final String apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replaceAll('{databaseId}', databaseId).replaceAll('{collectionId}', collectionId); - - final Map apiParams = { - 'documents': documents, - }; - - final Map apiHeaders = { - 'content-type': 'application/json', - }; - - final res = await client.call(HttpMethod.post, path: apiPath, params: apiParams, headers: apiHeaders); - - return models.DocumentList.fromMap(res.data); - - } - /// Get a document by its unique ID. This endpoint response returns a JSON /// object with the document data. Future getDocument({required String databaseId, required String collectionId, required String documentId, List? queries}) async { @@ -88,6 +67,28 @@ class Databases extends Service { } + /// Create or update a 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. + Future upsertDocument({required String databaseId, required String collectionId, required String documentId, required Map data, List? permissions}) async { + final String apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replaceAll('{databaseId}', databaseId).replaceAll('{collectionId}', collectionId).replaceAll('{documentId}', documentId); + + final Map apiParams = { + 'data': data, + 'permissions': permissions, + }; + + final Map apiHeaders = { + 'content-type': 'application/json', + }; + + final res = await client.call(HttpMethod.put, path: apiPath, params: apiParams, headers: apiHeaders); + + return models.Document.fromMap(res.data); + + } + /// Update a document by its unique ID. Using the patch method you can pass /// only specific fields that will get updated. Future updateDocument({required String databaseId, required String collectionId, required String documentId, Map? data, List? permissions}) async { diff --git a/lib/src/client.dart b/lib/src/client.dart index 81794c1..6d803ba 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -71,6 +71,11 @@ abstract class Client { /// The user session to authenticate with. Client setSession(value); + /// Set DevKey. + /// + /// Your secret dev API key. + Client setDevKey(value); + /// Add headers that should be sent with all API calls. Client addHeader(String key, String value); diff --git a/lib/src/client_base.dart b/lib/src/client_base.dart index 21a5809..d6a7033 100644 --- a/lib/src/client_base.dart +++ b/lib/src/client_base.dart @@ -14,6 +14,9 @@ abstract class ClientBase implements Client { /// The user session to authenticate with @override ClientBase setSession(value); + /// Your secret dev API key + @override + ClientBase setDevKey(value); @override ClientBase setSelfSigned({bool status = true}); diff --git a/lib/src/client_browser.dart b/lib/src/client_browser.dart index 073401c..3241345 100644 --- a/lib/src/client_browser.dart +++ b/lib/src/client_browser.dart @@ -84,6 +84,13 @@ class ClientBrowser extends ClientBase with ClientMixin { addHeader('X-Appwrite-Session', value); return this; } + /// Your secret dev API key + @override + ClientBrowser setDevKey(value) { + config['devKey'] = value; + addHeader('X-Appwrite-Dev-Key', value); + return this; + } @override ClientBrowser setSelfSigned({bool status = true}) { diff --git a/lib/src/client_io.dart b/lib/src/client_io.dart index e68e60c..b813ed7 100644 --- a/lib/src/client_io.dart +++ b/lib/src/client_io.dart @@ -113,6 +113,13 @@ class ClientIO extends ClientBase with ClientMixin { addHeader('X-Appwrite-Session', value); return this; } + /// Your secret dev API key + @override + ClientIO setDevKey(value) { + config['devKey'] = value; + addHeader('X-Appwrite-Dev-Key', value); + return this; + } @override ClientIO setSelfSigned({bool status = true}) { diff --git a/test/services/databases_test.dart b/test/services/databases_test.dart index 1622866..794ac1b 100644 --- a/test/services/databases_test.dart +++ b/test/services/databases_test.dart @@ -98,26 +98,6 @@ void main() { }); - test('test method createDocuments()', () async { - final Map data = { - 'total': 5, - 'documents': [],}; - - - when(client.call( - HttpMethod.post, - )).thenAnswer((_) async => Response(data: data)); - - - final response = await databases.createDocuments( - databaseId: '', - collectionId: '', - documents: [], - ); - expect(response, isA()); - - }); - test('test method getDocument()', () async { final Map data = { '\$id': '5e5ea5c16897e', @@ -142,6 +122,31 @@ void main() { }); + test('test method upsertDocument()', () async { + final Map data = { + '\$id': '5e5ea5c16897e', + '\$collectionId': '5e5ea5c15117e', + '\$databaseId': '5e5ea5c15117e', + '\$createdAt': '2020-10-15T06:38:00.000+00:00', + '\$updatedAt': '2020-10-15T06:38:00.000+00:00', + '\$permissions': [],}; + + + when(client.call( + HttpMethod.put, + )).thenAnswer((_) async => Response(data: data)); + + + final response = await databases.upsertDocument( + databaseId: '', + collectionId: '', + documentId: '', + data: {}, + ); + expect(response, isA()); + + }); + test('test method updateDocument()', () async { final Map data = { '\$id': '5e5ea5c16897e',