generateUseCases function
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,
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);
});
});
}