generate method

Future<void> generate({
  1. required String basePath,
  2. required FeatureSchema schema,
  3. String modelStrategy = 'empty',
  4. bool updateOnly = false,
})

Generate complete feature from schema

Implementation

Future<void> generate({
  required String basePath,
  required FeatureSchema schema,
  String modelStrategy = 'empty',
  bool updateOnly = false,
}) async {
  final timer = Stopwatch()..start();

  try {
    _validatePath(basePath);
    schema.functions.forEach(_validateFunction);

    logger.info(
      '${updateOnly ? 'Updating' : 'Generating'} feature: ${schema.name}',
    );

    // Generate all layers
    await _dataLayer.generate(
      basePath: basePath,
      schema: schema,
      modelStrategy: modelStrategy,
      updateOnly: updateOnly,
    );

    await _domainLayer.generate(
      basePath: basePath,
      schema: schema,
      updateOnly: updateOnly,
    );

    if (!updateOnly) {
      await _presentationLayer.generate(basePath: basePath, schema: schema);
    }

    // Generate/Update DI file
    await _generateDI(basePath, schema, updateOnly);

    // Format generated code
    await _formatGeneratedCode(basePath);

    // Run build_runner
    await _runBuildRunner(basePath);

    timer.stop();
    logger.success(
      '✓ Feature ${updateOnly ? 'updated' : 'generated'} successfully (${timer.elapsedMilliseconds}ms)',
    );
  } catch (e) {
    logger.err('Feature ${updateOnly ? 'update' : 'generation'} failed: $e');
    rethrow;
  }
}