redstone_rethinkdb 0.0.2 copy "redstone_rethinkdb: ^0.0.2" to clipboard
redstone_rethinkdb: ^0.0.2 copied to clipboard

outdated

MVC Plugin for Redstone

Redstone RethinkDb Plugin #

Basic #

Setup 1 #

Use rethinkPlugin instead of getMapperPlugin to get a Connection injected to your routes.

import 'package:redstone/server.dart' as app;
import 'package:rethinkdb_driver/rethinkdb_driver.dart';
import 'package:redstone_rethinkdb/redstone_rethinkdb.dart';

final Rethinkdb r = new Rethinkdb();

main () {
  RethinkDbManager manager = new RethinkDbManager("someHost", "someDatabase");
  app.addPlugin(rethinkPlugin(manager));
  
  ...
}

Useage 1 #

By convention in Rethinkdb the connection is named and in Redstone is named dbConn, therefore you should specify "dbConn" inside @app.Attr and set the name of the variable to conn.

@app.Route ('/someRoute')
someRoute (@app.Attr("dbConn") Connection conn) async {
 var result = await r
   .table ('someTable')
   //build your query as you like
   .run(conn);
   
 ...
}

Setup 2 #

You can also use the normal getMapperPlugin, but you will instead get injected a RethinkConnection.

import 'package:redstone/server.dart' as app;
import 'package:redstone_mapper/plugin.dart';
import 'package:rethinkdb_driver/rethinkdb_driver.dart';
import 'package:redstone_rethinkdb/redstone_rethinkdb.dart';

final Rethinkdb r = new Rethinkdb();

main () {
  RethinkDbManager manager = new RethinkDbManager("someHost", "someDatabase");
  app.addPlugin(getMapperPlugin(manager));
  
  ...
}

Useage 2 #

You can tap into the dbConn attribute without naming it in Attr (be sure to name the variable ``dbConn) but you have to access the ConnectionthroughdbConn.conn`.

@app.Route ('/someRoute')
someRoute (@app.Attr() RethinkConnection dbConn) async {
 var result = await r
   .table ('someTable')
   //build your query as you like
   .run(dbConn.conn);
 ...
}

RethinkServices #

Use RethinkServices<T> extends Table and lets you better structure your code and avoid error when repetively specifying the same table. It also includes some helper methods for basic CRUD operations; usually methods like get or insert but end int Typed or Now.

RethinkServices also includes a default field RethinkDb r so you dont have to create an instance yourself. The name of the current table can be accessed at tableName, and intance of the super class can be accessed at table. Here is an example of basic crude

@app.Group('/users')
@Encode()
class ServiciosUsuario extends RethinkServices<User> {
  ServiciosUsuario() : super('usuarios');

  @app.Route('/:id')
  Future<User> GET (String id) async {
    User user = await getNow(id);
    if (user == null)
      throw new app.ErrorResponse (404, {"error": "User not found"});

    return decode(user, User);
  }


  @app.Route('/:id', methods: const[app.PUT])
  Future<User> PUT (String id, @Decode(from: const[app.JSON, app.FORM]) User delta) async {
    delta.id = null;

    Map resp = await updateNow(id, delta);

    if (resp['replaced'] == 0)
      throw new app.ErrorResponse (304, {"error": "User not in database"});

    return GET(id);
  }

  @app.Route('/:id', methods: const[app.DELETE])
  Future<Map> DELETE (String id) async {

    Map resp = await deleteNow(id);
    if (resp['deleted'] == 0)
      throw new app.ErrorResponse (501, {"error": "User not in database"});

    return {"id": id};
  }

  @app.DefaultRoute (methods: const [app.POST])
  @Encode()
  Future<User> POST (@Decode() User user) async {

    var resp = await insertNow(user);
    user.id = resp["generated_keys"].first;

    return user;
  }
}

where User is

class User {
  @Field() String id;
  @Field() String firstname;
  @Field() String lastname;
}
0
likes
0
points
4
downloads

Publisher

unverified uploader

Weekly Downloads

MVC Plugin for Redstone

Repository (GitHub)
View/report issues

Documentation

Documentation

License

unknown (license)

Dependencies

connection_pool, redstone, redstone_mapper, rethinkdb_driver

More

Packages that depend on redstone_rethinkdb