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:provider --name=Auth/Event');
    exitCode = 1;
    return;
  }

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

  final className = '${CliNaming.toPascalCase(name)}ServiceProvider';
  final fileName = '${CliNaming.toSnakeCase(name)}_service_provider.dart';
  final filePath =
      'lib/app/providers/${folder.isEmpty ? '' : '$folder/'}$fileName';

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

  await file.create(recursive: true);

  await file.writeAsString('''
import 'package:khadem/contracts.dart' show ServiceProvider, ContainerInterface;

class $className extends ServiceProvider {
@override
void register(ContainerInterface container) {
  // Optional: put any registration logic here
}

@override
Future<void> boot(ContainerInterface container) async {
  // Optional: put any boot logic here
}
}
''');

  logger.info('✅ Service provider "$className" created at $filePath');
  exitCode = 0;
  return;
}