generateUseCases function

void generateUseCases({
  1. required String featureName,
  2. required Map<String, dynamic> pathsForFeature,
  3. required Map<String, dynamic> components,
  4. required Set<String> usedEntities,
  5. required String packageName,
  6. required String usecaseDir,
  7. required String providerDir,
  8. required UseCaseGenerator useCaseGenerator,
  9. required ProviderGenerator providerGenerator,
})

Implementation

void generateUseCases({
  required String featureName,
  required Map<String, dynamic> pathsForFeature,
  required Map<String, dynamic> components,
  required Set<String> usedEntities,
  required String packageName,
  required String usecaseDir,
  required String providerDir,
  required UseCaseGenerator useCaseGenerator,
  required ProviderGenerator providerGenerator,
}) {
  final repositoryClassName =
      featureName == 'default'
          ? packageName.pascalCase
          : featureName.pascalCase;

  final repositoryName = '${repositoryClassName}Repository';

  pathsForFeature.forEach((path, methods) {
    methods.forEach((method, details) {
      final methodName = generateMethodName(
        method,
        path,
        details['operationId'],
      );

      final result = repositoryReturnTypeResult(
        details,
        components['schemas'] ?? {},
      );

      usedEntities.addAll(result.entities);

      final returnType = result.type;

      final paramResult = generateParameters(details, components);
      usedEntities.addAll(paramResult.usedEntities);

      final paramsList =
          paramResult.params.isEmpty
              ? <String>[]
              : paramResult.params.split(', ');

      final needsFile = useFile(details, components, usedEntities);

      final usecaseCode = useCaseGenerator.generate(
        featureName: featureName,
        repositoryName: repositoryName,
        methodName: methodName,
        returnType: returnType,
        parameters: paramsList,
        usedEntities: usedEntities,
        needsFile: needsFile,
      );

      final providerParams =
          paramResult.params.isEmpty
              ? <ProviderParam>[]
              : paramResult.params.split(', ').map((p) {
                final parts = p.split(' ');
                return ProviderParam(type: parts[0], name: parts[1]);
              }).toList();

      final providerCode = providerGenerator.generate(
        featureName: featureName,
        usecaseName: methodName.pascalCase,
        methodName: methodName,
        params: providerParams,
        returnType: returnType,
      );

      File(
        '$providerDir/${methodName.snakeCase}_provider.dart',
      ).writeAsStringSync(providerCode);

      File(
        '$usecaseDir/${methodName.snakeCase}.dart',
      ).writeAsStringSync(usecaseCode);
    });
  });
}