handle method

  1. @override
Future<void> handle(
  1. List<String> args
)
override

Called automatically before executing the command. You can override to do pre-validation or setup.

Implementation

@override
Future<void> handle(List<String> args) async {
  final input = argResults?['name'] as String?;
  if (input == null || input.trim().isEmpty) {
    logger.error('❌ Usage: khadem make:seeder --name=UserSeeder');
    exitCode = 1;
    return;
  }

  final parts = CliNaming.splitFolderAndName(input);
  final folder = parts.folder;
  final raw = parts.name;

  final classBase =
      CliNaming.ensureSuffix(CliNaming.toPascalCase(raw), 'Seeder');
  final fileBaseRaw = CliNaming.toSnakeCase(raw);
  final fileBase = fileBaseRaw.endsWith('_seeder')
      ? fileBaseRaw
      : CliNaming.ensureSuffix(fileBaseRaw, '_seeder');

  final seederDir = folder.isEmpty
      ? 'lib/database/seeders'
      : 'lib/database/seeders/$folder';

  final filePath = '$seederDir/$fileBase.dart';
  final file = File(filePath);

  if (await file.exists()) {
    logger.error('❌ Seeder file already exists at $filePath');
    exitCode = 1;
    return;
  }

  await file.create(recursive: true);

  await file.writeAsString(
    '''
import 'package:khadem/contracts.dart' show Seeder;

class $classBase extends Seeder {
@override
Future<void> run() async {
  // TODO: implement seeding logic
  Log.info('🌱 Running $classBase...');

}
}
'''
        .trim(),
  );

  logger.info('✅ Seeder "$classBase" created successfully at $filePath');

  await _updateSeedersRegistry();
  logger.info('🔄 seeders.dart updated successfully.');

  exitCode = 0;
}