create<T extends Model> static method

Future<T?> create<T extends Model>(
  1. Map<String, dynamic> fromJson
)

Creates a new record from fromJson.

Prevents mass-assignment of id, uuid, timestamps.

Implementation

static Future<T?> create<T extends Model>(
  Map<String, dynamic> fromJson,
) async {
  final constructor = _jsonConstructors[T];
  if (constructor == null) return null;

  try {
    // Prevent injection of protected fields
    fromJson
      ..remove('id')
      ..remove('uuid')
      ..remove('created_at')
      ..remove('updated_at');

    final defaults = {
      'uuid': _uuid.v4(),
      'created_at': DateTime.now().toUtc().toIso8601String(),
      'updated_at': DateTime.now().toUtc().toIso8601String(),
    };

    final instance = constructor({...fromJson, ...defaults}) as T;

    if (await instance.save()) {
      return instance;
    }
    return null;
  } catch (e) {
    print('SQLite create error: $e');
    return null;
  }
}