import 'package:drift/drift.dart'; import 'package:sendtrain/database/database.dart'; part 'actions_dao.g.dart'; @DriftAccessor(tables: [Actions]) class ActionsDao extends DatabaseAccessor with _$ActionsDaoMixin { ActionsDao(super.db); Future> all() async { return await select(actions).get(); } Future find(int id) async { return await (select(actions)..where((action) => action.id.equals(id))).getSingle(); } Future> fromActivity(Activity activity, Session session) async { final result = select(db.activityActions).join( [ innerJoin( db.actions, db.actions.id.equalsExp(db.activityActions.actionId), ), ], ) ..where(db.activityActions.activityId.equals(activity.id)) ..where(db.activityActions.sessionId.equals(session.id)); final actions = (await result.get()) .map((e) => e.readTable(db.actions)) .toList(); return actions; } Stream> watchActivityActions(Activity activity, Session session) { final result = select(db.activityActions).join( [ innerJoin( db.actions, db.actions.id.equalsExp(db.activityActions.actionId), ), ], ) ..where(db.activityActions.activityId.equals(activity.id)) ..where(db.activityActions.sessionId.equals(session.id)); // final actions = result.watch().map((rows) { // return rows.map((row) { // row.readTable(db.actions); // }).toList(); // }); final actions = (result.watch()).map((rows) { return rows.map((row) => row.readTable(db.actions)).toList(); }); return actions; } Future createOrUpdate(ActionsCompanion action) => into(actions).insertOnConflictUpdate(action); Future replace(Action action) => update(actions).replace(action); }