Frezyx / talker

☎️ Advanced error handler and logger for dart and flutter apps
https://pub.dev/packages/talker_flutter
MIT License
508 stars 62 forks source link

Integration for `drift` #261

Open dickermoshe opened 1 month ago

dickermoshe commented 1 month ago

Is your feature request related to a problem? Please describe. There is no package for drift Link

Describe the solution you'd like A package for drift

Describe alternatives you've considered This implementation they have an example of


@DriftDatabase(tables: [])
class AppDatabase extends _$AppDatabase {
  AppDatabase()
      : super(drift.driftDatabase(name: "shas.db")
            .interceptWith(LogInterceptor()));

  @override
  int get schemaVersion => 1;
}

class LogInterceptor extends QueryInterceptor {
  Future<T> _run<T>(
      String description, FutureOr<T> Function() operation) async {
    final stopwatch = Stopwatch()..start();
    talker.log('Running $description');

    try {
      final result = await operation();
      talker.log(' => succeeded after ${stopwatch.elapsedMilliseconds}ms');
      return result;
    } on Object catch (e, s) {
      talker.error(' => failed after ${stopwatch.elapsedMilliseconds}ms', e, s);
      rethrow;
    }
  }

  @override
  TransactionExecutor beginTransaction(QueryExecutor parent) {
    talker.log('begin');
    return super.beginTransaction(parent);
  }

  @override
  Future<void> commitTransaction(TransactionExecutor inner) {
    return _run('commit', () => inner.send());
  }

  @override
  Future<void> rollbackTransaction(TransactionExecutor inner) {
    return _run('rollback', () => inner.rollback());
  }

  @override
  Future<void> runBatched(
      QueryExecutor executor, BatchedStatements statements) {
    return _run(
        'batch with $statements', () => executor.runBatched(statements));
  }

  @override
  Future<int> runInsert(
      QueryExecutor executor, String statement, List<Object?> args) {
    return _run(
        '$statement with $args', () => executor.runInsert(statement, args));
  }

  @override
  Future<int> runUpdate(
      QueryExecutor executor, String statement, List<Object?> args) {
    return _run(
        '$statement with $args', () => executor.runUpdate(statement, args));
  }

  @override
  Future<int> runDelete(
      QueryExecutor executor, String statement, List<Object?> args) {
    return _run(
        '$statement with $args', () => executor.runDelete(statement, args));
  }

  @override
  Future<void> runCustom(
      QueryExecutor executor, String statement, List<Object?> args) {
    return _run(
        '$statement with $args', () => executor.runCustom(statement, args));
  }

  @override
  Future<List<Map<String, Object?>>> runSelect(
      QueryExecutor executor, String statement, List<Object?> args) {
    return _run(
        '$statement with $args', () => executor.runSelect(statement, args));
  }
}

Additional context N/A

Frezyx commented 2 weeks ago

Hello @dickermoshe ! Drift is a really popular library and we would like to have addon package to collect transactions logs. Can you create pull-request with this new package ?

dickermoshe commented 2 weeks ago

I'll add this to our todo list.