arangodb_repository 0.9.0 arangodb_repository: ^0.9.0 copied to clipboard
Concrete implementation of the nosql_repository package for the ArangoDB database.
import 'package:arango_driver/arango_driver.dart';
import 'package:arangodb_repository/arangodb_repository.dart';
import 'principal.dart';
import 'recipe.dart';
void main(List<String> args) async {
// first we create a connection to ArangoDB
final db = _connectArangoDb();
// now, we create a repository on that connection to the recipes collection.
final repository = ArangoDbRepository<Recipe>(db, 'recipes');
// first we need to create a principal to represent the
// user performing the operations to the database
final principal = Principal('Alice');
var recipe = Recipe(
title: 'Scrambled eggs',
ingredients: [], //['6 eggs', 'salt', 'pepper', 'milk', 'olive oil'],
steps: [
'Whisk all the ingredients',
'Pour a sliver of olive oil on the pan',
'Add the mixture to the heated oil',
'gently mix'
],
);
var map = _recipeToMap(recipe);
// this following line will create a new recipe in
// the database, so long has the 'create_recipe' permission.
//map = await repository.create(map, principal, 'create_recipe');
// we will assume that create returns a key in the _key field:
//var key = map['_key'];
var key = '210965';
// and with that key we can retrieve the object again from
// the database by using get
map = await repository.get(key, principal, 'read_recipe');
// which we finally convert again to a Recipe
recipe = _recipeFromMap(map);
print(recipe.title);
}
/// Serializes a recipe to a Map<String, dynamic>.
/// This method is dying to be code-generated
Map<String, dynamic> _recipeToMap(Recipe recipe) => {
'title': recipe.title,
'ingredients': recipe.ingredients,
'steps': recipe.steps
};
/// Deserializes a Recipe from a Map<String, dynamic>.
/// This method is also dying to be code-generated.
Recipe _recipeFromMap(Map<String, dynamic> map) => Recipe(
title: map['title'],
ingredients: [...(map['ingredients']).map((e) => _ingredientFromMap(e))],
steps: [...map['steps']],
);
Ingredient _ingredientFromMap(Map<String, dynamic> map) => Ingredient(
a: map['a'],
);
ArangoDBClient _connectArangoDb() {
var client = ArangoDBClient(
scheme: 'http',
host: 'localhost',
port: 8529,
db: 'mydatabase',
user: 'user',
pass: 'password',
);
return client;
}