checkEntityFields<O> method

  1. @override
void checkEntityFields<O>(
  1. O o,
  2. String entityName,
  3. String table, {
  4. EntityHandler<O>? entityHandler,
})
override

Implementation

@override
void checkEntityFields<O>(
  O o,
  String entityName,
  String table, {
  EntityHandler<O>? entityHandler,
}) {
  Map<Object, Map<String, dynamic>>? map = _getTableMap(table, false);
  if (map == null) return;

  entityHandler ??= getEntityHandler<O>(
    entityName: entityName,
    tableName: table,
  );
  if (entityHandler == null) {
    throw StateError(
      "Can't define `EntityHandler`> entityName: $entityName ; table: $table ; entityType: $O",
    );
  }

  var entityId = getEntityID(
    o!,
    entityHandler: entityHandler,
    entityName: entityName,
    tableName: table,
  );

  var fieldsEntityAnnotations = entityHandler.getAllFieldsEntityAnnotations(
    o,
  );

  var uniques =
      fieldsEntityAnnotations?.entries
          .where((e) => e.value.hasUnique)
          .toList();
  if (uniques == null || uniques.isEmpty) return;

  for (var e in uniques) {
    var field = e.key;
    var value = entityHandler.getField(o, field);
    if (value == null) continue;

    if (_containsEntryWithConflictFieldValue(
      map,
      entityHandler,
      entityId,
      field,
      value,
    )) {
      throw EntityFieldInvalid(
        'unique',
        value,
        fieldName: field,
        entityType: entityHandler.type,
        tableName: table,
      );
    }
  }
}