generateBodyModel method
Future<String>
generateBodyModel({
- required APISchemaObject rootSchema,
- required String directoryPath,
- required Operation operation,
- required BodyModelType modelType,
- String? prefixName,
Implementation
Future<String> generateBodyModel({
required APISchemaObject rootSchema,
required String directoryPath,
required Operation operation,
required BodyModelType modelType,
String? prefixName,
}) async {
final fileName =
"${operation.prefixSnakeCase}${prefixName != null ? "_${StringUtils.camelCaseToLowerUnderscore(prefixName)}" : ""}_${modelType.lower}";
final fileNameCamelCase =
"${operation.prefixPascalCase}${prefixName ?? ""}${modelType.capital}";
final rootFile = await File("$directoryPath/$fileName.dart").create();
String parametersString = '';
String importsString = '';
if (rootSchema.properties != null) {
for (final key in rootSchema.properties!.keys) {
final value = rootSchema.properties![key];
switch (value?.type) {
case APIType.array:
final modelName = await generateBodyModel(
rootSchema: value!.items!,
directoryPath: directoryPath,
operation: operation,
modelType: modelType,
prefixName: StringUtils.capitalize(key) + "Item",
);
importsString += generateImport(StringUtils.camelCaseToLowerUnderscore(modelName));
parametersString += generateParameter(
description: value.description ?? "",
modelType: "List<$modelName>",
name: key,
);
break;
case APIType.object:
final modelName = await generateBodyModel(
rootSchema: value?.items ?? APISchemaObject(),
directoryPath: directoryPath,
operation: operation,
modelType: modelType,
prefixName: StringUtils.capitalize(key),
);
importsString += generateImport(StringUtils.camelCaseToLowerUnderscore(modelName));
parametersString += generateParameter(
description: value?.description ?? "",
modelType: modelName,
name: key,
);
break;
default:
parametersString += generateParameter(
description: value?.description ?? "",
type: value?.type,
name: key,
);
}
}
}
final content = freezedTemplate(
filename: fileName,
filenameCamelCase: fileNameCamelCase,
nestedModelName: prefixName ?? operation.prefixPascalCase + modelType.nestedModel,
comment: rootSchema.description,
parameters: parametersString,
imports: importsString,
);
await rootFile.writeAsString(content);
await CLI.runFormatter(rootFile.parent.path, printErrors: false);
return fileNameCamelCase;
}