setup method

Future<void> setup({
  1. required Map<String, dynamic> database,
  2. required List<Seeder> seeders,
  3. List<String> args = const [],
})

Implementation

Future<void> setup({
  required Map<String, dynamic> database,
  required List<Seeder> seeders,
  List<String> args = const [],
}) async {
  guardEnvironment('migrate:seed', force: hasForceFlag(args));

  final defaultConnection = database['default'];
  if (defaultConnection == null) {
    throw DatabaseException(
      'Database config not valid: "default" is missing',
    );
  }

  final connections = database['connections'];
  if (connections is! Map<String, dynamic> ||
      connections[defaultConnection] == null) {
    throw DatabaseException(
      'Database config not valid: no connection named "$defaultConnection"',
    );
  }

  ConnectionManager().defaultConnection = defaultConnection;
  await ConnectionManager().connect(
    _config(connections[defaultConnection]),
    defaultConnection,
  );

  try {
    for (final seeder in seeders) {
      final stopwatch = Stopwatch()..start();
      final name = toSnakeCase(seeder.runtimeType.toString());
      try {
        await seeder.run();
        stopwatch.stop();
        stderr.writeln(
          ' Seeder $name executed ....................................\x1B[32m ${stopwatch.elapsedMilliseconds}ms DONE\x1B[0m',
        );
      } on QueryException catch (e) {
        stopwatch.stop();
        throw DatabaseException('Seeder $name failed', e.cause);
      }
    }
    stderr.writeln(
      '\x1B[32m All database seeders executed successfully \x1B[0m',
    );
  } finally {
    await ConnectionManager().connection(defaultConnection)?.close();
  }
}