serinus_drift 1.0.1 copy "serinus_drift: ^1.0.1" to clipboard
serinus_drift: ^1.0.1 copied to clipboard

Drift integration for Serinus, allows you to use Serinus with Drift as the database layer.

Serinus Banner

Serinus Drift #

A plugin to add Drift database integration to your Serinus applications 🐤.

Installation #

dart pub add serinus_drift

Usage #

Add the DriftModule to the imports of your main application module and provide your Drift database instance. You can also use DriftModule.forFeature to register DAOs that depend on the database. Here's a complete example of how to set up a Serinus application with Drift:

import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:serinus/serinus.dart';
import 'package:serinus_drift/serinus_drift.dart';
part 'serinus_drift.g.dart';

class Users extends Table {
  IntColumn get id => integer().autoIncrement()();
  TextColumn get name => text()();
}

@DriftDatabase(tables: [Users])
class AppDatabase extends _$AppDatabase {
  AppDatabase(super.e);

  @override
  int get schemaVersion => 1;
}

@DriftAccessor(tables: [Users])
class UsersDao extends DatabaseAccessor<AppDatabase> with _$UsersDaoMixin {
  UsersDao(super.db);

  Future<List<User>> getAllUsers() => select(users).get();
  Future<int> insertUser(UsersCompanion user) => into(users).insert(user);
}

class AppModule extends Module {
  AppModule() : super(
    imports: [
      DriftModule(AppDatabase(NativeDatabase.memory())),
      DriftModule.forFeature<AppDatabase>(
        daos: (database) => [
          UsersDao(database)
        ], 
      ),
    ],
    controllers: [
      UserController()
    ]
  );
}

class UserController extends Controller {
  UserController() : super('/users') {
    
    on(Route.get('/'), (context) async {
      // Inject the feature-specific DAO!
      final usersDao = context.use<UsersDao>();
      // Inject the Drift database
      final db = context.use<AppDatabase>();
      
      // Perform your Drift queries
      final users = await db.select(db.users).get();
      final usersFromDao = await usersDao.getAllUsers();
      
      return {
        'users': users.map((u) => {'id': u.id, 'name': u.name}).toList(),
        'usersFromDao': usersFromDao.map((u) => {'id': u.id, 'name': u.name}).toList(),
      };
    });
    on(Route.post('/'), (RequestContext<Map<String, dynamic>> context) async {
      final usersDao = context.use<UsersDao>();
      final data = context.body;
      final name = data['name'].toString();
      final id = await usersDao.insertUser(UsersCompanion(name: Value(name)));
      return {'id': id, 'name': name};
    });
    
  }
}

Future<void> main() async {
  final app = await serinus.createApplication(
    entrypoint: AppModule(),
  );
  await app.serve();
}
2
likes
160
points
19
downloads

Documentation

Documentation
API reference

Publisher

verified publisherserinus.app

Weekly Downloads

Drift integration for Serinus, allows you to use Serinus with Drift as the database layer.

Homepage
Repository (GitHub)
View/report issues

Topics

#dart #flutter #database #drift #serinus

License

MIT (license)

Dependencies

drift, drift_postgres, serinus

More

Packages that depend on serinus_drift