SupabaseForeignKeyConstraint.fromJson constructor

SupabaseForeignKeyConstraint.fromJson(
  1. Map<String, dynamic> json
)

Creates a SupabaseForeignKeyConstraint instance from a JSON map (deserialization). Handles missing fields from older data formats with default values.

Implementation

factory SupabaseForeignKeyConstraint.fromJson(Map<String, dynamic> json) {
  final cols = List<String>.from(json['columns'] as List);
  final origCols = List<String>.from(
    json['originalColumns'] as List? ?? cols,
  );
  final localCols =
      json['localColumns'] != null
          ? List<String>.from(json['localColumns'] as List)
          : origCols.map(_makeSafeDartIdentifier).toList();

  final fTblName = json['foreignTableName'] as String;
  final origFTblName =
      json['originalForeignTableName'] as String? ?? fTblName;
  final localFTblName =
      json['localForeignTableName'] as String? ??
      _makeSafeDartClassName(origFTblName);

  final fCols = List<String>.from(json['foreignColumns'] as List);
  final origFCols = List<String>.from(
    json['originalForeignColumns'] as List? ?? fCols,
  );
  final localFCols =
      json['localForeignColumns'] != null
          ? List<String>.from(json['localForeignColumns'] as List)
          : origFCols.map(_makeSafeDartIdentifier).toList();

  return SupabaseForeignKeyConstraint(
    constraintName: json['constraintName'] as String,
    columns: cols,
    originalColumns: origCols,
    localColumns: localCols,
    foreignTableSchema: json['foreignTableSchema'] as String,
    foreignTableName: fTblName,
    originalForeignTableName: origFTblName,
    localForeignTableName: localFTblName,
    foreignColumns: fCols,
    originalForeignColumns: origFCols,
    localForeignColumns: localFCols,
    updateRule: json['updateRule'] as String,
    deleteRule: json['deleteRule'] as String,
    matchOption: json['matchOption'] as String,
    isDeferrable: json['isDeferrable'] as bool,
    initiallyDeferred: json['initiallyDeferred'] as bool,
    joinTableName:
        json['joinTableName'] as String?, // Deserialize the join table name
  );
}