extractIdStrategy static method

IDStrategy? extractIdStrategy(
  1. ElementAnnotation? idAnnotation
)

Extract ID strategy from @Id annotation

Implementation

static IDStrategy? extractIdStrategy(ElementAnnotation? idAnnotation) {
  if (idAnnotation == null) return null;

  try {
    final source = idAnnotation.toSource();

    // Check for named constructors (postgres, mysql, sqlite, uuid)
    if (source.contains('Id.postgres')) return IDStrategy.serial;
    if (source.contains('Id.mysql')) return IDStrategy.autoIncrement;
    if (source.contains('Id.sqlite')) return IDStrategy.autoIncrementSqlite;
    if (source.contains('Id.uuid')) return IDStrategy.uuid;

    // Check for strategy parameter in default constructor
    final strategyMatch = RegExp(
      r'strategy\s*:\s*IDStrategy\.(\w+)',
    ).firstMatch(source);
    if (strategyMatch != null) {
      final strategyName = strategyMatch.group(1);
      return IDStrategy.values.firstWhere(
        (s) => s.name == strategyName,
        orElse: () => IDStrategy.autoIncrement,
      );
    }
  } catch (e) {
    // Silently fail and return null
  }

  return null;
}