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.trim().isEmpty) {
    logger.error(
      'Usage: khadem make:middleware --name=MiddlewareName or --name=folder/MiddlewareName',
    );
    exitCode = 1;
    return;
  }

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

  // Ensure middleware name ends with 'Middleware'
  middlewareName = CliNaming.ensureSuffix(
    CliNaming.toPascalCase(middlewareName),
    'Middleware',
  );

  final className = middlewareName;
  final fileName =
      '${CliNaming.toSnakeCase(middlewareName.replaceAll('Middleware', ''))}_middleware.dart';
  final relativePath = folder.isEmpty
      ? 'lib/app/http/middleware/$fileName'
      : 'lib/app/http/middleware/$folder/$fileName';

  final file = File(relativePath);

  if (file.existsSync()) {
    logger.error('❌ Middleware "$fileName" already exists!');
    exitCode = 1;
    return;
  }

  await file.create(recursive: true);
  await file.writeAsString(
    _template(
      className,
      middlewareName.replaceAll('Middleware', ''),
      folder,
    ),
  );

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