buildContext method
Builds a Context from a featureName and parsed schema.
Returns an empty context if validation fails. The caller is expected to halt or surface the error to the user. Response fields are collected into a nested tree with a root node matching the feature name.
Implementation
Future<Context> buildContext(String featureName, Schema schema) async {
final projectRoot = Directory.current.path;
final projectName = await YamlHelper().getProjectName(workingDirectory: projectRoot);
if (!validateSchema(schema)) {
return Context(
name: '',
nameLowerCase: '',
nameCamelCase: '',
isList: false,
fields: [],
methods: [],
generateUseCase: false,
projectRoot: projectRoot,
projectName: projectName,
config: Config(),
);
}
// Use consistent naming across the generated layers.
final feature = featureName.toPascalCase();
bool generateUseCase = false;
final methods = <ContextMethod>[];
// Build method-level context for usecase/event/bloc generation.
final apiMethods = schema.api?.methods?.method ?? {};
for (var method in apiMethods.entries) {
final contextMethod = buildContextMethod(method);
methods.add(contextMethod);
if (contextMethod.hasUseCase) {
generateUseCase = true;
}
}
// Response fields become entity/model properties.
final response = schema.response ?? {};
final contextFields = <NestedContextField>[];
final fields = buildContextFields(response, contextFields);
contextFields.add(NestedContextField(name: feature, properties: fields, isRoot: true));
return Context(
name: feature,
nameLowerCase: featureName.toLowerCase(),
nameCamelCase: featureName.toCamelCase(),
isList: schema.isList,
fields: contextFields,
methods: methods,
generateUseCase: generateUseCase,
projectRoot: projectRoot,
projectName: projectName,
config: schema.config ?? Config(),
);
}