generateBodyModel method

Future<String> generateBodyModel({
  1. required APISchemaObject rootSchema,
  2. required String directoryPath,
  3. required Operation operation,
  4. required BodyModelType modelType,
  5. 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;
}