serializedPropsToEntity<Model> function
Entity<dynamic, Object>
serializedPropsToEntity<Model>(
- Map<
String, dynamic> json, { - List<
EntityTypeConverter> converters = const [],
Implementation
Entity serializedPropsToEntity<Model>(
final Map<String, dynamic> json, {
List<EntityTypeConverter> converters = const [],
}) {
final mirror = reflectEntity<Model>();
final entityMeta = getEntityMetaData(Model);
final entityProperties = getEntityProperties(Model);
final constructorMethod = mirror.declarations.entries
.firstWhereOrNull((e) => e.key == '$Model')
?.value as MethodMirror;
final constructorParams = constructorMethod.parameters;
final mappedConverters =
_combineConverters(entityMeta.converters ?? [], converters);
/// conversion to Database compatible types using [EntityTypeConverter]
final transformedRecordMap = <String, dynamic>{};
for (final entry in entityProperties.entries) {
final value = json[entry.value.dbColumnName];
final typeConverter = mappedConverters[entry.value.type];
transformedRecordMap[entry.value.dartName] =
typeConverter == null ? value : typeConverter.fromDbType(value);
}
final namedDeps = constructorParams
.where((e) => e.isNamed)
.map((e) =>
(name: e.simpleName, value: transformedRecordMap[e.simpleName]))
.fold<Map<Symbol, dynamic>>(
{}, (prev, e) => prev..[Symbol(e.name)] = e.value);
final dependencies = constructorParams
.where((e) => !e.isNamed)
.map((e) => transformedRecordMap[e.simpleName])
.toList();
final newEntityInstance = mirror.newInstance('', dependencies, namedDeps);
return (newEntityInstance as Entity)
..id = json[entityMeta.primaryKey]
..createdAt = transformedRecordMap[entityMeta.createdAtColumn]
..updatedAt = transformedRecordMap[entityMeta.updatedAtColumn]
.._isLoadedFromDB = true;
}