modifyRepositoryFile function

void modifyRepositoryFile(
  1. Map<String, dynamic> modelConfig
)

Implementation

void modifyRepositoryFile(Map<String, dynamic> modelConfig) {
  final functionName = modelConfig['function_name'];
  final parameters = modelConfig['parameters'];
  final modelClassRelativePath = modelConfig['model_class_relative_path'];
  final modelDirectory = path.dirname(modelClassRelativePath);
  final repositoryDirectory = path.join(modelDirectory, '..', 'repository');
  final repositoryFileName = '${_getFileNameWithoutExtension(modelClassRelativePath).toLowerCase()}_repository.dart';
  final repositoryPath = path.join(repositoryDirectory, repositoryFileName);
  final repositoryFile = File(repositoryPath);

  if (!repositoryFile.existsSync()) {
    print('Repository file not found at $repositoryPath.');
    return;
  }

  final repositoryContent = repositoryFile.readAsStringSync();
  print('Current repository content:\n$repositoryContent'); // Debug print

  if (!repositoryContent.contains('$functionName({')) {
    final functionParameters = parameters.entries
        .map((entry) => 'required ${_getType(entry.value)} ${_toCamelCase(entry.key)}')
        .join(', ');

    final modelClassName = _toCamelCase(_getFileNameWithoutExtension(modelClassRelativePath));

    final newFunction = '''
  Future<$modelClassName?> $functionName({$functionParameters});
''';

    final updatedContent = repositoryContent.replaceFirstMapped(
      RegExp(r'(abstract class\s+\w+Repository\s*{)'),
      (match) => '${match.group(0)}\n$newFunction',
    );

    print('Updated repository content:\n$updatedContent'); // Debug print

    repositoryFile.writeAsStringSync(updatedContent);
    print('Repository file updated successfully: $repositoryPath');
  } else {
    print('Function $functionName already exists in repository.');
  }
}