Skip to content

Commit

Permalink
Merge pull request #26 from appwrite/add-node-quickstart
Browse files Browse the repository at this point in the history
Add Server SDK Quickstarts
  • Loading branch information
Vincent (Wen Yu) Ge authored Sep 25, 2023
2 parents 044ba20 + 6cd2afe commit b1ca680
Show file tree
Hide file tree
Showing 3 changed files with 394 additions and 1 deletion.
202 changes: 202 additions & 0 deletions src/routes/docs/quick-starts/dart/+page.markdoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
---
layout: article
title: Start with Dart
description: This is the description used for SEO.
---
Learn to setup your first Dart project powered by Appwrite.
{% section #step-1 step=1 title="Create project" %}
Head to the [Appwrite Console](https://cloud.appwrite.io/console).

![Create project screen](/images/docs/databases/quick-start/create-project.png)

If this is your first time using Appwrite, create an account and create your first project.


Then, under **Integrate with your server**, add an **API Key** with the following scopes.

| Category {% width=120 %} | Required scopes | Purpose |
|-----------|-----------------------|---------|
| Database | `databases.write` | Allows API key to create, update, and delete [databases](/docs/products/databases/databases). |
| | `collections.write` | Allows API key to create, update, and delete [collections](/docs/products/databases/collections). |
| | `attributes.write` | Allows API key to create, update, and delete [attributes](/docs/products/databases/collections#attributes). |
| | `documents.read` | Allows API key to create, update, and delete [documents](/docs/products/databases/documents). |
| | `documents.write` | Allows API key to read [documents](/docs/products/databases/documents). |

Other scopes are optional.

![Add API Key]()

{% /section %}
{% section #step-2 step=2 title="Create Dart project" %}
Create a Dart CLI application.

```sh
dart create -t console my_app
cd my_app
```

After entering the project directory, remove the `lib/` and `test/` directories.

{% /section %}
{% section #step-3 step=3 title="Install Appwrite" %}

Install the Dart Appwrite SDK.

```sh
dart pub add dart_appwrite
```
{% /section %}
{% section #step-4 step=4 title="Import Appwrite" %}

Find your project ID in the **Settings** page. Also, click on the **View API Keys** button to find the API key that was created earlier.

![Settings page in Appwrite Console.](/images/docs/databases/quick-start/project-id.png)

Open `bin/my_app.dart` and initialize the Appwrite Client. Replace `<YOUR_PROJECT_ID>` with your project ID and `<YOUR_API_KEY>` with your API key.

```dart
import 'package:dart_appwrite/dart_appwrite.dart';

var client = Client();

Future<void> main() async {
client
.setEndpoint("https://cloud.appwrite.io/v1")
.setProject("<YOUR_PROJECT_ID>")
.setKey("<YOUR_API_KEY>");
}
```

{% /section %}
{% section #step-5 step=5 title="Initialize database" %}

Once the Appwrite Client is initialized, create a function to configure a todo collection.

```dart
var databases;
var todoDatabase;
var todoCollection;

Future<void> prepareDatabase() async {
databases = Databases(client);

todoDatabase = await databases.create(
databaseId: ID.unique(),
name: 'TodosDB'
);

todoCollection = await databases.createCollection(
databaseId: todoDatabase.$id,
collectionId: ID.unique(),
name: 'Todos'
);

await databases.createStringAttribute(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id,
key: 'title',
size: 255,
xrequired: true
);

await databases.createStringAttribute(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id,
key: 'description',
size: 255,
xrequired: false,
xdefault: 'This is a test description'
);

await databases.createBooleanAttribute(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id,
key: 'isComplete',
xrequired: true
);
}
```

{% /section %}
{% section #step-6 step=6 title="Add documents" %}
Create a function to add some mock data into your new collection.
```dart
Future<void> seedDatabase() async {
var testTodo1 = {
'title': 'Buy apples',
'description': 'At least 2KGs',
'isComplete': true
};

var testTodo2 = {
'title': 'Wash the apples',
'isComplete': true
};

var testTodo3 = {
'title': 'Cut the apples',
'description': 'Don\'t forget to pack them in a box',
'isComplete': false
};

await databases.createDocument(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id,
documentId: ID.unique(),
data: testTodo1
);

await databases.createDocument(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id,
documentId: ID.unique(),
data: testTodo2
);

await databases.createDocument(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id,
documentId: ID.unique(),
data: testTodo3
);
}
```

{% /section %}
{% section #step-7 step=7 title="Retrieve documents" %}

Create a function to retrieve the mock todo data.
```dart
Future<void> getTodos() async {
var todos = await databases.listDocuments(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id
);

todos.documents.forEach((todo) {
print('Title: ${todo.data['title']}\nDescription: ${todo.data['description']}\nIs Todo Complete: ${todo.data['isComplete']}\n\n');
});
}
```

Finally, revisit the `main()` function and call the functions created in previous steps.
```dart
Future<void> main() async {
client
.setEndpoint("https://cloud.appwrite.io/v1")
.setProject("<YOUR_PROJECT_ID>")
.setKey("<YOUR_API_KEY>");

await prepareDatabase();
await Future.delayed(const Duration(seconds: 1));
await seedDatabase();
await getTodos();
}
```

{% /section %}
{% section #step-8 step=8 title="All set" %}

Run your project with `dart run bin/my_app.dart` and view the response in your console.

{% /section %}
191 changes: 191 additions & 0 deletions src/routes/docs/quick-starts/node/+page.markdoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
---
layout: article
title: Start with Node.js
description: This is the description used for SEO.
---
Learn to setup your first Node.js project powered by Appwrite.
{% section #step-1 step=1 title="Create project" %}
Head to the [Appwrite Console](https://cloud.appwrite.io/console).

![Create project screen](/images/docs/databases/quick-start/create-project.png)

If this is your first time using Appwrite, create an account and create your first project.

Then, under **Integrate with your server**, add an **API Key** with the following scopes.

| Category {% width=120 %} | Required scopes | Purpose |
|-----------|-----------------------|---------|
| Database | `databases.write` | Allows API key to create, update, and delete [databases](/docs/products/databases/databases). |
| | `collections.write` | Allows API key to create, update, and delete [collections](/docs/products/databases/collections). |
| | `attributes.write` | Allows API key to create, update, and delete [attributes](/docs/products/databases/collections#attributes). |
| | `documents.read` | Allows API key to create, update, and delete [documents](/docs/products/databases/documents). |
| | `documents.write` | Allows API key to read [documents](/docs/products/databases/documents). |

Other scopes are optional.

![Add API Key]()

{% /section %}
{% section #step-2 step=2 title="Create Node.js project" %}
Create a Node.js CLI application.

```sh
mkdir my-app
cd my-app
npm init
```

{% /section %}
{% section #step-3 step=3 title="Install Appwrite" %}

Install the Node.js Appwrite SDK.

```sh
npm install node-appwrite
```
{% /section %}
{% section #step-4 step=4 title="Import Appwrite" %}

Find your project ID in the **Settings** page. Also, click on the **View API Keys** button to find the API key that was created earlier.

![Settings page in Appwrite Console.](/images/docs/databases/quick-start/project-id.png)

Create a new file `app.js` and initialize the Appwrite Client. Replace `<YOUR_PROJECT_ID>` with your project ID and `<YOUR_API_KEY>` with your API key.

```js
const sdk = require("node-appwrite");

const client = new sdk.Client();

client
.setEndpoint("https://cloud.appwrite.io/v1")
.setProject("<YOUR_PROJECT_ID>")
.setKey("<YOUR_API_KEY>");
```

{% /section %}
{% section #step-5 step=5 title="Initialize database" %}

Once the Appwrite Client is initialized, create a function to configure a todo collection.

```js
const databases = new sdk.Databases(client);

var todoDatabase;
var todoCollection;

async function prepareDatabase() {
todoDatabase = await databases.create(
sdk.ID.unique(),
'TodosDB'
);

todoCollection = await databases.createCollection(
todoDatabase.$id,
sdk.ID.unique(),
'Todos'
);

await databases.createStringAttribute(
todoDatabase.$id,
todoCollection.$id,
'title',
255,
true
);

await databases.createStringAttribute(
todoDatabase.$id,
todoCollection.$id,
'description',
255, false,
'This is a test description'
);

await databases.createBooleanAttribute(
todoDatabase.$id,
todoCollection.$id,
'isComplete',
true
);
}
```

{% /section %}
{% section #step-6 step=6 title="Add documents" %}
Create a function to add some mock data into your new collection.
```js
async function seedDatabase() {
var testTodo1 = {
title: 'Buy apples',
description: 'At least 2KGs',
isComplete: true
};

var testTodo2 = {
title: 'Wash the apples',
isComplete: true
};

var testTodo3 = {
title: 'Cut the apples',
description: 'Don\'t forget to pack them in a box',
isComplete: false
};

await databases.createDocument(
todoDatabase.$id,
todoCollection.$id,
sdk.ID.unique(),
testTodo1
);

await databases.createDocument(
todoDatabase.$id,
todoCollection.$id,
sdk.ID.unique(),
testTodo2
);

await databases.createDocument(
todoDatabase.$id,
todoCollection.$id,
sdk.ID.unique(),
testTodo3
);
}
```

{% /section %}
{% section #step-7 step=7 title="Retrieve documents" %}

Create a function to retrieve the mock todo data and a function to execute the requests in order.
Run the functions to by calling `runAllTasks();`.

```js
async function getTodos() {
var todos = await databases.listDocuments(
todoDatabase.$id,
todoCollection.$id
);

todos.documents.forEach(todo => {
console.log(`Title: ${todo.title}\nDescription: ${todo.description}\nIs Todo Complete: ${todo.isComplete}\n\n`);
});
}

async function runAllTasks() {
await prepareDatabase();
await seedDatabase();
await getTodos();
}
runAllTasks();
```

{% /section %}

{% section #step-8 step=8 title="All set" %}

Run your project with `node app.js` and view the response in your console.

{% /section %}
Loading

0 comments on commit b1ca680

Please sign in to comment.