handle method
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;
}