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 name = argResults?['name'] as String?;
  if (name == null || name.isEmpty) {
    logger.error(
      '❌ Usage: khadem make:job --name=JobName or --name=folder/JobName',
    );
    exitCode = 1;
    return;
  }

  final parts = CliNaming.splitFolderAndName(name);
  final folder = parts.folder;
  var jobName = parts.name;

  // Ensure job name ends with 'Job'
  jobName = CliNaming.ensureSuffix(CliNaming.toPascalCase(jobName), 'Job');

  final className = jobName;
  final fileName =
      '${CliNaming.toSnakeCase(jobName.replaceAll('Job', ''))}_job.dart';
  final relativePath = folder.isEmpty
      ? 'lib/app/jobs/$fileName'
      : 'lib/app/jobs/$folder/$fileName';

  final file = File(relativePath);
  await file.create(recursive: true);
  await file.writeAsString(
    _jobStub(className, jobName.replaceAll('Job', ''), folder),
  );

  logger.info('✅ Job "$className" created at "$relativePath"');
  exitCode = 0;
  return;
}