run method

  1. @override
Future<int> run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
Future<int> run() async {
  if (argResults!.rest.isEmpty) {
    Logger.error('Missing project name.');
    Logger.info('Usage: karna create <project_name> [--org com.example]');
    return 64;
  }

  final projectName = argResults!.rest.first;
  final org = argResults!['org'] as String;

  if (!isValidSnakeCase(projectName)) {
    Logger.error(
      'Project name must be snake_case (lowercase letters, numbers, underscores).',
    );
    return 64;
  }

  if (Directory(projectName).existsSync()) {
    Logger.error("Directory '$projectName' already exists.");
    return 1;
  }

  Logger.info('🚀 Creating Karna MVC project: $projectName');
  Logger.info('   Organization: $org');
  Logger.newLine();

  await generateProject(projectName: projectName, org: org);

  return 0;
}