Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: create methods to interact with DetaBase #3

Merged
merged 17 commits into from
Jan 24, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
.dart_tool/
.packages
build/
pubspec.lock
pubspec.lock
coverage/
148 changes: 143 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,149 @@
# deta
# Deta

[![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]
[![License: MIT][license_badge]][license_link]
[![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] [![License: MIT][license_badge]][license_link] [![coverage][coverage_badge]][ci_link]

A Very Good Project created by Very Good CLI.
---

A Dart package to interact with the [HTTP API](https://docs.deta.sh/) of the free services of the [Deta](https://deta.sh/) plataform.

## Getting Started

Check the full example [here](https://github.com/yeikel16/deta-dart/blob/main/example/deta_base_example.dart).

### Install

Add to dependencies on `pubspec.yaml`:

```yaml
dependencies:
deta:
git:
url: https://github.com/yeikel16/deta-dart.git
```

### Usege

We declare class **Deta**, which receives our private credential as a parameter.

```dart
final deta = Deta(projectKey: 'projectKey', dio: Dio());
```

🚨 **WARNING** 🚨
Your `projectKey` is confidential and meant to be used by you. Anyone who has your project key can access your database. Please, do not share it or commit it in your code.

### DetaBase

`DetaBase` is a fully-managed, fast, scalable and secure NoSQL database with a focus on end-user simplicity.

We define our `DetaBase`, with witch we are going to interact through the `base` method that receives the name of the `DetaBase` as a parameter. In case not exist it will be created instantly on first use, you can create as many `DetaBase` as you need.

A `DetaBase` instance is a collection of data, not unlike a Key-Value store, a MongoDB collection or a PostgreSQL/MySQL table.

```dart
final detabase = deta.base('lenguages');
```

#### Methods

##### put

Save an item. It will update an item if the key already exists.

```dart
await detabase.put({
'key': 'dart-g',
'name': 'Dart',
'description':
'Dart is a general-purpose programming language that adds strong '
'support for modularity, co-variant return types, and a strong '
'emphasis on type safety.',
'creator': 'Google',
'year': 2012,
});
```

##### putMany

Saves a list the elements, this list can only have a maximum of 20 element.

```dart
await detabase.putMany(
items: lenguages.map((lenguage) => lenguage.toJson()).toList(),
);
```

##### insert

Saves an element like `put`, with the difference that if this element exists in `DetaBase` it will throw an `DetaObjectException`. The `key` required that are part of the elemet to be saved.

```dart
await detabase.insert({
'key': 'r-f',
'name': 'R',
'description': 'R is a programming language and software environment '
'for statistical computing and graphics.',
'creator': 'R Foundation',
'year': 1995,
});
```

##### update

Update the element from the supplied `key`, you have to pass the whole element, both the updated and unchanged parameters.

```dart
await detabase.update(
key: 'ruby-ym',
item: <String, dynamic>{
'key': 'ruby-ym',
'name': 'Ruby',
'description': 'Ruby is a dynamic, open source, general-purpose '
'programming language with a focus on simplicity and productivity.',
'creator': 'Yukihiro Matsumoto',
'year': 1995,
},
);
```

##### get

Get a spesific element form the key.

```dart
final item = await detabase.get('dart-g');
```

##### delete

Delete a spesific element from the key.

```dart
final wasDeleted = await detabase.delete('ruby');
```

##### fetch

Return all saved items if no `query` is specified.

```dart
final all = await detabase.fetch();
```

Return all element that matched the indicated `query`.

```dart
final result = await detabase.fetch(
query: [DetaQuery('year').lessThanOrEqualTo(2000).and('name').prefix('C')],
);
```

A Very Good Project created by [Very Good CLI](https://github.com/VeryGoodOpenSource/very_good_cli).

[ci_link]: https://github.com/VeryGoodOpenSource/very_good_cli/actions
[coverage_badge]: https://raw.githubusercontent.com/VeryGoodOpenSource/very_good_cli/main/coverage_badge.svg
[license_badge]: https://img.shields.io/badge/license-MIT-blue.svg
[license_link]: https://opensource.org/licenses/MIT
[logo]: https://docs.deta.sh/img/logo.svg
[very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg
[very_good_analysis_link]: https://pub.dev/packages/very_good_analysis
[very_good_analysis_link]: https://pub.dev/packages/very_good_analysis